以163邮箱为例:
注册 163 邮箱,登录 163 邮箱后,设置邮箱账户开通 smtp 服务
需要根据注册时的手机号发送的验证码来开通获取邮箱客户端授权码。开通成功后,会显示个人
授权访问码,该授权码是后面通过 Java 发送邮件的认证密码,非常重要。
添加依赖
org.springframework.boot spring-boot-starter-amqp org.springframework.boot spring-boot-starter-mail org.springframework.boot spring-boot-starter-thymeleaf com.yjxxt yeb-server 0.0.1-SNAPSHOT
修改配置文件(application.yml)
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: 你的服务器地址 # 端口 port: 567
准备邮件模板
在resource目录下新建templates目录,然后在新建mail.html
入职欢迎邮件 欢迎 加入 XXXX 大家庭,您的入职信息如下:
| 姓名 | |
| 职位 | |
| 职称 | |
| 部门 |
我们公司的工作忠旨是严格,创新,诚信,您的加入将为我们带来新鲜的血液,带来创 新的思维,以及为我们树立良好的公司形象!希望在以后的工作中我们能够齐心协力,与时 俱进,团结协作!同时也祝您在本公司,工作愉快,实现自己的人生价值!希望在未来的日子 里,携手共进!
3.发送邮件(简单模式)在yeb-server添加依赖添加依赖
org.springframework.boot spring-boot-starter-amqp
同样需要修改配置文件
spring: # rabbitmq配置 rabbitmq: # 用户名 username: guest # 密码 password: guest # 服务器地址 host: 你的服务器地址 # 端口 port: 5672
消息发送
@Override
public 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;
@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);
//发件人
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);
}
@Bean
public Queue queue(){
return new Queue("mail.welcome");
}
}
5.测试



