springboot结合rabbitmq实现异步邮件发送

svbadmin学习日志

本学习日志是使用Springboot和Vue来搭建的后台管理系统:
演示地址:http://118.31.68.110:8081/index.html
账号:root
密码:123
所有代码可以在gitbub上找到,切换到相应分支即可。【代码传送门】

正篇

第一节 spring boot 模块化构建项目
第二节 整合mybatisplus完成用户增删改查
第三节 整合springsecurity实现基于RBAC的用户登录
第四节 springsecurity结合jwt实现前后端分离开发
第五节 使用ResponseBodyAdvice格式化接口输出
第六节 springboot结合redis实现缓存策略
第七节 springboot结合rabbitmq实现队列消息
第八节 springboot结合rabbitmq实现异步邮件发送
第九节 利用springboot的aop实现行为日志管理
第十节 利用Quartz实现数据库定时备份
第十一节 springboot配置log输出到本地文件
第十二节 使用flyway对数据库进行版本管理
第十三节 springboot配合VbenAdmin实现前端登录
第十四节 springboot配合VbenAdmin实现用户CURD
第十五节 基于RBAC的权限管理VbenAdmin前端实现
第十六节 springboot 打包vue代码实现前后端统一部署

番外

2.1 数据库设计原则
3.1 配置apifox自动获取登录的token
13.1 springboot 全局捕捉filter中的异常
14.1 springsecurity整合mybatisplus出现isEnable的问题和解决方案


文章目录

  • svbadmin学习日志
  • 前言
  • 一、新建邮件服务器应用
    • 1.新建mailserver
    • 2.配置mailsever
      • 3. 配置application.properties
  • 二、业务编码
    • 1. MailReceiver
    • 2. register.html
  • 测试
    • 开启两个server
    • 调用新增用户接口
    • 查收邮件
  • 总结
  • 问题
  • 代码地址


前言

顺着第七节的内容,现在队列里面有消息了,需要根据这个消息发送一封邮件给新增加的用户,让其激活账号等。这里我们打算新一个邮件服务器应用,这样就可以分应用部署了。


一、新建邮件服务器应用

1.新建mailserver

参考第一节,在svbadmin下建一个mailserver的模块,注意这里参考admin-web的创建方式。先建一个springboot项目然后导入,然后维护下svbadmin的pom文件

<modules>
    <module>adminserver</module>
    <module>mailserver</module>
</modules>

2.配置mailsever

对mailserver的pom文件进行修改

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <artifactId>svbadmin</artifactId>
        <groupId>com.shenfangtao</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <groupId>com.shenfangtao</groupId>
    <artifactId>mailserver</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mailserver</name>
    <description>mailserver</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>com.shenfangtao</groupId>
            <artifactId>admin-model</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

3. 配置application.properties

# mail
spring.mail.host=smtp.qq.com
spring.mail.port=465
spring.mail.username=xxxxxxxxx@qq.com
spring.mail.password=xxxxxxxxxxxxxxx
spring.mail.default-encoding=UTF-8
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.debug=true

二、业务编码

1. MailReceiver

新建一个消费类,用于监听rabbitmq里的消息,然后发送邮件给新增的用户。

@Component
public class MailReceiver {

    @Autowired
    JavaMailSender javaMailSender;

    @Autowired
    TemplateEngine templateEngine;

    @RabbitListener(queues = "add-user")
    public void handler(Message message, Channel channel) throws IOException {
        User user = (User) message.getPayload();
        System.out.println("有新用户添加进来了:" + user.getName());

        Context ctx = new Context();
        ctx.setVariable("username",user.getUsername());
        ctx.setVariable("name",user.getName());
        String mail = templateEngine.process("register.html", ctx);

        sendHtmlMail("[email protected]",
                user.getEmail(),
                "[email protected]",
                "svbadmin新用户注册邮件",
                mail);
    }

    /**
     * Notes:  发送html格式的邮件
     * @param: [from, to, cc, subject, content]
     * @return: void
     * Author: 涛声依旧 [email protected]
     * Time: 2022/7/29 17:00
     **/
    public void sendHtmlMail(String from, String to, String cc, String subject, String content){
        try {
            MimeMessage message = javaMailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setBcc(cc);
            helper.setSubject(subject);
            helper.setText(content,true);
            javaMailSender.send(message);
        } catch (MessagingException e) {
            throw new RuntimeException(e);
        }
    }

    public void sendSimpleMail(String from, String to, String cc, String subject, String content) {
        SimpleMailMessage simpMsg = new SimpleMailMessage();
        simpMsg.setFrom(from);
        simpMsg.setTo(to);
        simpMsg.setCc(cc);
        simpMsg.setSubject(subject);
        simpMsg.setText(content);
        javaMailSender.send(simpMsg);
    }
}

2. register.html

在resources下建立templates文件夹,在其下创建register.html文件

DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>邮件title>
head>
<body>
<div>邮箱激活div>
<div>您的注册信息是:
    <table border="1">
        <tr>
            <td>用户名td>
            <td th:text="${username}">td>
        tr>
        <tr>
            <td>用户昵称td>
            <td th:text="${name}">td>
        tr>
    table>
div>
<div>
    <a href="http://www.saphub.cc">核对无误请点击本链接激活账号,完善个人信息a>
div>
body>
html>

测试

开启两个server

springboot结合rabbitmq实现异步邮件发送_第1张图片

调用新增用户接口

springboot结合rabbitmq实现异步邮件发送_第2张图片

查收邮件

springboot结合rabbitmq实现异步邮件发送_第3张图片


总结

  1. MailReceiver 需要加入@Component注解,不然无法监听消息
  2. 由于pom引入了admin-model, 而admin-model里面有mybatisplus,所以配置文件里要加入数据库配置

问题

  1. spring-boot-maven-plugin 报红
    添加版本号
    <plugin>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-maven-plugin</artifactId>
         <version>2.7.1</version>
     </plugin>

代码地址

代码

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