Java邮件发送服务模块设计

Posted 学无止境小奇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java邮件发送服务模块设计相关的知识,希望对你有一定的参考价值。

👏👏👏

哈喽!大家好,我是【学无止境小奇】,一位热爱分享各种技术的博主!😍😍😍

⭐【学无止境小奇】的创作宗旨:每一条命令都亲自执行过,每一行代码都实际运行过,每一种方法都真实实践过,每一篇文章都良心制作过。✊✊✊

⭐【学无止境小奇】的博客中所有涉及命令、代码的地方,除了提供图片供大家参考,另外会在图片下方提供一份纯文本格式的命令或者代码方便大家粘贴复制直接执行命令或者运行代码。🤝🤝🤝

⭐如果你对技术有着浓厚的兴趣,欢迎关注【学无止境小奇】,欢迎大家和我一起交流。😘😘😘

❤️❤️❤️感谢各位朋友接下来的阅读❤️❤️❤️

文章目录

一、Java邮件发送服务模块设计

1、Java邮件发送服务模块设计

1.1、引入依赖

       <!-- rabbitmq 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
        <!-- mail 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        <!-- thymeleaf 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <!-- server 依赖 -->
        <dependency>
            <groupId>com.xiaoqi</groupId>
            <artifactId>yeb-server</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

1.2、选择邮箱

这里我已网易邮箱为例,开启smtp服务,会有一个授权码,记得保留后,后面会用到

1.3、application配置

server:
  # 端口
  port: 8082
spring:
  # 邮件配置
  mail:
    #邮件服务器地址
    host: smtp.163.com
    # 协议
    protocol: smtp
    # 编码格式
    default-encoding: utf-8
    # 授权码(在邮箱开通服务时获取)
    password: 你的授权码
    # 发送者邮箱地址
    username: 你的邮箱地址
    # 端口(不同邮箱端口号不同)
    port: 25

  # rabbitmq配置
  rabbitmq:
    # 用户名
    username: guest
    # 密码
    password: guest
    # 服务器地址
    host: 192.168.10.100
    # 端口
    port: 5672

1.4、创建模板

我们创建一个html格式的邮件模板

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.theymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>入职欢迎邮件</title>
</head>
<body>
    欢迎<span th:text="$name"></span> 加入XXXX大家庭,您的入职信息如下:
<table border="1">
    <tr>
        <td>姓名</td>
        <td th:text="$name"></td>
    </tr>
    <tr>
        <td>职位</td>
        <td th:text="$posName"></td>
    </tr>
    <tr>
        <td>职称</td>
        <td th:text="$joblevelName"></td>
    </tr>
    <tr>
        <td>部门</td>
        <td th:text="$departmentName"></td>
    </tr>
</table>

<p>
    我们公司的工作宗旨是严格,创新,诚信,您的加入将为我们带来新鲜的血液。希望在未来的日子里,携手共进!
</p>
</body>
</html>

1.5、发送端逻辑代码

引入rabbit模板

    @Autowired
    private RabbitTemplate rabbitTemplate;

Employee emp = employeeMapper.getEmployee(employee.getId()).get(0);
            rabbitTemplate.convertAndSend("mail.welcome",emp);

1.6、接收端逻辑代码

package com.xiaoqi.mail;/**
 * @ProjectName: yeb
 * @Package: com.xiaoqi.mail
 * @ClassName: MailReceiver
 * @Author: LiShiQi
 * @Description: $description
 * @Date: 2022/2/24 12:43
 * @Version: 1.0
 */

import com.xiaoqi.server.pojo.Employee;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.mail.MailProperties;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.util.Date;


/**
 * @Description
 * @Author LiShiQi
 * @Date 2022/2/24 12:43
 * @Version 1.0
 */
@Component
public class MailReceiver 
    private static final Logger LOGGER = LoggerFactory.getLogger(MailReceiver.class);

    //邮件发送
    @Autowired
    private JavaMailSender javaMailSender;
    //邮件配置
    @Autowired
    private MailProperties mailProperties;
    //引擎
    @Autowired
    private TemplateEngine templateEngine;

    //监听
    @RabbitListener(queues = "mail.welcome")
    public void handler(Employee employee)
        //创建消息
        MimeMessage msg = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(msg);
        try 
            //发件人
            helper.setFrom(mailProperties.getUsername());
            //收件人
            helper.setTo(employee.getEmail());
            //主题
            helper.setSubject("入职欢迎邮件");
            //发送日期
            helper.setSentDate(new Date());

            //邮件内容
            Context context = new Context();
            context.setVariable("name",employee.getName());
            context.setVariable("posName",employee.getPosition().getName());
            context.setVariable("joblevelName",employee.getJoblevel().getName());
            context.setVariable("departmentName",employee.getDepartment().getName());
            String mail = templateEngine.process("mail", context);
            //参数为true就是html
            helper.setText(mail,true);
            //发送邮件
            javaMailSender.send(msg);
         catch (MessagingException e) 
            LOGGER.error("邮件发送失败=========>",e.getMessage());
        
    



  @Bean
    public Queue queue()
        return new Queue("mail.welcome");
    

忽略数据库,因为我们A模块引用了B模块,但是我们A模块不需要连接数据库,B模块需要连接数据库,但是我们这个时候启动A模块就会报错找不到url,所以需要在A模块中加入如下配置

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

1.7、效果

最后我们运行我们的项目,在添加用户的功能这里添加一个用户,因为我们刚刚发送邮件的逻辑是加入到添加用户这个接口里面的,因为这是一个入职邮件,在有新用户添加后就会发送入职邮件,这个时候我们添加用户的时候输入一个我们自己的邮箱,测试一下能否成功发送邮件。

以上是关于Java邮件发送服务模块设计的主要内容,如果未能解决你的问题,请参考以下文章

专稿模块化设计:最佳的邮件处理之道

WindowsGUI自动化测试框架搭建-邮件服务模块封装(sendmail)

python3+requests库框架设计08-发送邮件

java发送邮件

Python-定时爬取指定城市天气-邮件提醒

WindowsGUI自动化测试框架搭建(十四)-框架主入口main.py设计&sendmail邮件服务调用和生成