SpringBoot +RabbitMQ实现邮件发送

SpringBoot +RabbitMQ实现邮件发送

新建一个模块mail(与服务端分开来)

导入依赖

        
        <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>
        
        <dependency>
            <groupId>com.cincogroupId>
            <artifactId>server-springbootartifactId>
            <version>0.0.1-SNAPSHOTversion>
        dependency>

application.yml----mail配置

spring:
  # 邮件配置
  mail:
    # 邮件服务器地址
    host: smtp.qq.com
    # 协议
    protocol: smtp
    # 编码格式
    default-encoding: utf-8
    # 授权码(在邮箱开通服务时获取)
    password: xxxxxxxx
    # 发送者邮箱地址
    username: [email protected]
    # 端口(不同邮箱端口号不同,这里qq邮箱是587)
    port: 587

application.yml----rabbitmq配置

  # rabbitmq配置(服务端也要配置,因为要传值)
  rabbitmq:
    # 用户名
    username: admin
    # 密码
    password: admin
    # 服务器地址,填自己的服务器地址
    host: xxxx.xxxx.xxxx.xxxx
    # 端口
    port: 5672

我这里的案例就是插入员工数据时触发邮件发送活动

用RabbitListener去监听,一旦服务端发送了消息,邮件就会发送出去

服务端主要逻辑代码

    //注入RabbitTemplate
	@Autowired
    private RabbitTemplate rabbitTemplate;
        if (baseMapper.insert(employee) == 1){
            Employee emp = baseMapper.getEmployee(employee.getId()).get(0);
            //插入成功就把该employee对象发送到“mail.welcome" 这个队列
            rabbitTemplate.convertAndSend("mail.welcome",emp);
            return Result.success("添加成功");
        }
        return Result.error("添加失败!");

邮件发送

@Component
public class MailReceiver {
	//logger日志,出错时方便排错,这个可有可无
    public 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 mimeMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage);
        try {
            //发件人
            helper.setFrom(mailProperties.getUsername());
            //收件人
            helper.setTo(employee.getEmail());
            //主题
            helper.setSubject("入职欢迎");
            //发送日期
            helper.setSentDate(new Date());
            //邮件内容
            Context context = new Context();
     		//把需要的信息存到Context对象中(注意这个Context类是thymeleaf包下的)
            context.setVariable("name",employee.getName());
            context.setVariable("posName", employee.getPosition().getName());
            context.setVariable("joblevelName", employee.getJoblevel().getName());
            context.setVariable("departmentName", employee.getDepartment().getName());
            //然后把context传给mail.html
            String mail = templateEngine.process("mail", context);
            //true 设置以html形式发送
            helper.setText(mail,true);
            //发送邮件
            javaMailSender.send(mimeMessage);
            LOGGER.info("邮件发送成功");
        } catch (MessagingException e) {
            LOGGER.error("邮件发送失败=========>{}", e.getMessage());
        }
    }
}

html信息模板 : mail.html ,主要是把服务端传过来的employee对象信息放进去

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>

插入员工时就会发送邮件,效果如下
SpringBoot +RabbitMQ实现邮件发送_第1张图片

你可能感兴趣的:(rabbitmq,spring,boot,java)