> 文档中心 > RabbitMq使用 邮件服务

RabbitMq使用 邮件服务


1.设置邮箱服务

以163邮箱为例:
在这里插入图片描述
注册 163 邮箱,登录 163 邮箱后,设置邮箱账户开通 smtp 服务
在这里插入图片描述
需要根据注册时的手机号发送的验证码来开通获取邮箱客户端授权码。开通成功后,会显示个人
授权访问码,该授权码是后面通过 Java 发送邮件的认证密码,非常重要。

2.创建邮件服务项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
添加依赖

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</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.yjxxt</groupId><artifactId>yeb-server</artifactId><version>0.0.1-SNAPSHOT</version></dependency></dependencies>

修改配置文件(application.yml)

server:# 端口port: 8082spring:# 邮件配置mail:# 邮件服务器地址host: smtp.163.com# 协议protocol: smtp# 编码格式default-encoding: utf-8# 授权码(在邮箱开通服务时获取)password: 你的授权码# 发送者邮箱地址username: 你的邮箱地址# 端口(不同邮箱端口号不同)port: 25# rabbitmq配置rabbitmq:# 用户名username: guest# 密码password: guest# 服务器地址host: 你的服务器地址# 端口port: 567

准备邮件模板
在resource目录下新建templates目录,然后在新建mail.html

<html lang="en" xmlns:th="http://www.thymeleaf.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>

3.发送邮件(简单模式)

在yeb-server添加依赖添加依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>

同样需要修改配置文件

spring:# rabbitmq配置rabbitmq:# 用户名username: guest# 密码password: guest# 服务器地址host: 你的服务器地址# 端口port: 5672

消息发送

/** * 添加员工 * * @param employee * @return */@Overridepublic RespBean addEmp(Employee employee) {//处理合同期限,保留2位小数LocalDate beginContract = employee.getBeginContract();LocalDate endContract = employee.getEndContract();long days = beginContract.until(endContract, ChronoUnit.DAYS);//计算有多少天DecimalFormat decimalFormat = new DecimalFormat("##.00");//保留两位小数employee.setContractTerm(Double.parseDouble(decimalFormat.format(days / 365.00)));//插入合同期限if (1 == employeeMapper.insert(employee)) {Employee emp = employeeMapper.getEmployee(employee.getId()).get(0);//发送信息rabbitTemplate.convertAndSend("mail.welcome", emp, new CorrelationData(msgId));return RespBean.success("添加成功!");}return RespBean.error("添加失败!");}

4.消息接收

回到最开始的邮件服务项目
创建MailReceiver.java

package com.xxxx.mail;import com.rabbitmq.client.Channel;import com.xxxx.server.pojo.Employee;import com.xxxx.server.pojo.MailConstants;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.amqp.rabbit.annotation.RabbitListener;import org.springframework.amqp.support.AmqpHeaders;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.autoconfigure.mail.MailProperties;import org.springframework.data.redis.core.HashOperations;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.mail.javamail.JavaMailSender;import org.springframework.mail.javamail.MimeMessageHelper;import org.springframework.messaging.Message;import org.springframework.messaging.MessageHeaders;import org.springframework.stereotype.Component;import org.thymeleaf.TemplateEngine;import org.thymeleaf.context.Context;import javax.mail.internet.MimeMessage;import java.io.IOException;import java.util.Date;/** * 消息接收者 * * @author zhoubin * @since 1.0.0 */@Componentpublic class MailReceiver {//日志private static final Logger LOGGER = LoggerFactory.getLogger(MailReceiver.class);@Autowiredprivate JavaMailSender javaMailSender;@Autowiredprivate MailProperties mailProperties;@Autowiredprivate TemplateEngine templateEngine;@RabbitListener(queues = "mail.welcome")public void handler(Employee employee) {MimeMessage msg = javaMailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(msg);//发件人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);//这里的mail要和mail.html名字相同helper.setText(mail, true);//true表示以html的形式//发送邮件javaMailSender.send(msg);LOGGER.info("邮件发送成功");} catch (Exception e) {LOGGER.error("邮件发送失败=========>{}", e.getMessage());}}}

需要在启动类中添加队列

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})//exclude = {DataSourceAutoConfiguration.class}:为了排除掉数据库连接public class VoaMailApplication {public static void main(String[] args) {SpringApplication.run(MailApplication.class,args);}@Beanpublic Queue queue(){return new Queue("mail.welcome");}}

5.测试

RabbitMq使用 邮件服务