使用rabbitmq作为消息中间件实现简单邮件发送业务

在项目中用到了邮件发送的业务(新员工入职,入职后自动向其发送入职邮件),这里使用rabbitmq作为消息中间件简单实现一个邮件发送的业务

1. 准备一个发送者邮箱,开启SMTP服务
这里使用了一个163邮箱作为发送者邮箱,开启SMTP服务得到一个授权码
使用rabbitmq作为消息中间件实现简单邮件发送业务_第1张图片
使用rabbitmq作为消息中间件实现简单邮件发送业务_第2张图片

  1. 新建一个模块作为邮件发送模块
    使用rabbitmq作为消息中间件实现简单邮件发送业务_第3张图片

  2. 依赖

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-amqpartifactId>
        dependency>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-mailartifactId>
        dependency>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-thymeleafartifactId>
        dependency>
  1. 配置
server:
  port: 8082
spring:
  # 邮件配置
  mail:
    #邮件服务器地址  QQ邮箱为smtp.qq.com
    host: smtp.163.com
    #协议
    protocol: smtp
    default-encoding: UTF-8
    #授权码
    password: 开通SMTP服务获得的授权码
    #发送者邮箱地址
    username: 发送者邮箱地址
    #邮箱端口  QQ邮箱为465
    port: 25
  # rabbitmq配置
  rabbitmq:
    username: guest
    password: guest
    host: 8.140.157.58
    port: 5672
  1. 邮件模板mail.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>加入大家庭,您的入职信息如下:
<table border="0.5">
    <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>
body>
html>

  1. 创建一个队列
    @Bean
    public Queue queue(){
        return new Queue("mail.yyx");
    }
  1. 在项目中需要的地方将发送的信息添加到rabbitmq的消息队列中
    msg为对应邮件模板的数据
rabbitTemplate.convertAndSend("mail.yyx",msg);
  1. 邮件发送模块创建一个消费者消费rabbitmq的消息队列中的信息,发送邮件
    Employee 为项目中的实体类,即为上边传入的msg
@Component
public class MailReceiver {
    private static final Logger LOGGER = LoggerFactory.getLogger(MailReceiver.class);

    @Resource
    private JavaMailSender javaMailSender;
    @Resource
    private MailProperties mailProperties;
    @Resource
    private TemplateEngine templateEngine;

    @RabbitListener(queues = "mail.yyx")
    public void handler(Employee employee){
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage);
        try {
            //发件人
            mimeMessageHelper.setFrom(mailProperties.getUsername());
            //收件人
            mimeMessageHelper.setTo(employee.getEmail());
            //主题
            mimeMessageHelper.setSubject("入职欢迎邮件");
            //发送日期
            mimeMessageHelper.setSentDate(new Date());
            //邮件发送内容
            Context context = new Context();
            context.setVariable("name",employee.getName());
            context.setVariable("posName",employee.getPosName());
            context.setVariable("joblevelName",employee.getJoblevelName());
            context.setVariable("departmentName",employee.getDepartmentName());
            String mail = templateEngine.process("mail", context);
            mimeMessageHelper.setText(mail,true);
            //发送邮件
            javaMailSender.send(mimeMessage);
        } catch (MessagingException e) {
            LOGGER.error("邮件发送失败======>",e.getMessage());
        }
    }

}
  1. 测试
    使用rabbitmq作为消息中间件实现简单邮件发送业务_第4张图片

你可能感兴趣的:(rabbitmq)