新建一个模块mail(与服务端分开来)
导入依赖
org.springframework.boot
spring-boot-starter-amqp
org.springframework.boot
spring-boot-starter-mail
org.springframework.boot
spring-boot-starter-thymeleaf
com.cinco
server-springboot
0.0.1-SNAPSHOT
application.yml----mail配置
spring:
# 邮件配置
mail:
# 邮件服务器地址
host: smtp.qq.com
# 协议
protocol: smtp
# 编码格式
default-encoding: utf-8
# 授权码(在邮箱开通服务时获取)
password: xxxxxxxx
# 发送者邮箱地址
username: xxxxxxx@qq.com
# 端口(不同邮箱端口号不同,这里qq邮箱是587)
port: 587
application.yml----rabbitmq配置
# rabbitmq配置(服务端也要配置,因为要传值)
rabbitmq:
# 用户名
username: admin
# 密码
password: admin
# 服务器地址,填自己的服务器地址
host: xxxx.xxxx.xxxx.xxxx
# 端口
port: 5672
我这里的案例就是插入员工数据时触发邮件发送活动
提前去rabbitmq管理界面新建queue “mail.welcome”
用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对象信息放进去
入职欢迎邮件
欢迎 加入XXXX大家庭,您的入职信息如下:
| 姓名 | |
| 职位 | |
| 职称 | |
| 部门 |
我们公司的工作忠旨是严格,创新,诚信,您的加入将为我们带来新鲜的血液,带来创新的思维,以及为我们树立良好的公司形象!希望在以后的工作中我们能够齐心协力,与时俱进,团结协作!同时也祝您在本公司,工作愉快,实现自己的人生价值!希望在未来的日子里,携手共进!
插入员工时就会发送邮件,效果如下



