Java邮件发送服务模块设计

简介: 本文讲解Java邮件发送服务模块设计。

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



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


1.1、引入依赖


24.png


 <!-- 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服务,会有一个授权码,记得保留后,后面会用到


25.png


1.3、application配置


26.png


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格式的邮件模板


27.png


<!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模板


28.png


 @Autowired
    private RabbitTemplate rabbitTemplate;


29.png


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


1.6、接收端逻辑代码


30.png


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());
        }
    }
}


31.png


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


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


@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})


1.7、效果


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


相关文章
|
23天前
|
存储 Java 关系型数据库
社区医院管理服务系统【GUI/Swing+MySQL】(Java课设)
社区医院管理服务系统【GUI/Swing+MySQL】(Java课设)
25 1
|
2月前
|
监控 负载均衡 Dubbo
|
2月前
|
Java Unix 应用服务中间件
使用java service wrapper把windows flume做成服务
使用java service wrapper把windows flume做成服务
|
2天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
26 3
|
1月前
|
Java
使用java底层实现邮件的发送(含测试,源码)
使用java底层实现邮件的发送(含测试,源码)
9 0
|
4天前
|
JavaScript Java 测试技术
基于Java的宠物服务平台的设计与实现(源码+lw+部署文档+讲解等)
基于Java的宠物服务平台的设计与实现(源码+lw+部署文档+讲解等)
16 1
|
4天前
|
JavaScript Java 测试技术
基于Java的中学生课后服务的信息管理与推荐的设计与实现(源码+lw+部署文档+讲解等)
基于Java的中学生课后服务的信息管理与推荐的设计与实现(源码+lw+部署文档+讲解等)
24 2
|
5天前
|
JavaScript Java 测试技术
基于Java的珠江学院大学生自愿者服务网的设计与实现(源码+lw+部署文档+讲解等)
基于Java的珠江学院大学生自愿者服务网的设计与实现(源码+lw+部署文档+讲解等)
24 0
|
9天前
|
JavaScript Java 测试技术
基于Java的家政公司服务平台的设计与实现(源码+lw+部署文档+讲解等)
基于Java的家政公司服务平台的设计与实现(源码+lw+部署文档+讲解等)
25 1
|
12天前
|
JavaScript Java 测试技术
基于Java的社区老年人关怀服务系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的社区老年人关怀服务系统的设计与实现(源码+lw+部署文档+讲解等)
25 1