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