1. 导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2. 配置
配置邮件也是很简单的,可以yml文件中配置,要注意的是password填的不是邮箱密码,而是授权码。
qq邮箱获取授权码的方法,可以进入QQ邮箱首页->设置->帐户,开启SMTP服务,并生成授权码
spring:
mail:
# 配置 SMTP 服务器地址
host: smtp.qq.com
# 发送者邮箱
username: 自己的qq邮箱
# 配置密码,注意不是真正的密码,而是刚刚申请到的授权码
password: tksntpyyovoebcai
# 端口号465或587
port: 587
# 默认的邮件编码为UTF-8
default-encoding: UTF-8
# 配置SSL 加密工厂
properties:
mail:
smtp:
socketFactoryClass: javax.net.ssl.SSLSocketFactory
#表示开启 DEBUG 模式,这样,邮件发送过程的日志会在控制台打印出来,方便排查错误
debug: true
3. 使用
Springboot融合了mail功能,导入依赖后就可以直接使用。
发送简单邮件(不带附件,不带格式):
@SpringBootTest
class SpringbootApplicationTests {
@Autowired
JavaMailSender javaMailSender;
@Test
void contextLoads() throws Exception {
SimpleMailMessage message=new SimpleMailMessage();
message.setText("内容");
message.setSubject("主题");
message.setTo("收件人");
message.setCc("抄送人");
message.setBcc("密送人");
javaMailSender.send(message);
}
}
发送带Html格式的附件:
@SpringBootTest
class SpringbootApplicationTests {
@Autowired
JavaMailSender javaMailSender;
@Test
void contextLoads() throws Exception {
MimeMessage mailMessage=javaMailSender.createMimeMessage();
//需要借助Helper类
MimeMessageHelper helper=new MimeMessageHelper(mailMessage);
String context="<b>尊敬的用户:</b><br> 您好,管理员已为你申请了新的账号,"+
"请您尽快通过<a href=\"http://www.liwz.top/\">链接</a>登录系统。"
+"<br>修改密码并完善你的个人信息。<br><br><br><b>员工管理系统<br>Li,Wan Zhi</b>";
try {
helper.setFrom("发送人");
helper.setTo("收件人");
helper.setBcc("密送人");
helper.setSubject("主题");
helper.setSentDate(new Date());//发送时间
helper.setText(context,true);
//第一个参数要发送的内容,第二个参数是不是Html格式。
javaMailSender.send(mailMessage);
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
发送带附件的邮件:
@SpringBootTest
class SpringbootApplicationTests {
@Autowired
JavaMailSender javaMailSender;
@Test
void contextLoads() throws Exception {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
// true表示构建一个可以带附件的邮件对象
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
helper.setSubject("这是一封测试邮件");
helper.setFrom("97******9@qq.com");
helper.setTo("10*****16@qq.com");
//helper.setCc("37xxxxx37@qq.com");
//helper.setBcc("14xxxxx098@qq.com");
helper.setSentDate(new Date());
helper.setText("这是测试邮件的正文");
// 第一个参数是自定义的名称,后缀需要加上,第二个参数是文件的位置
helper.addAttachment("资料.xlsx",new File("/Users/gamedev/Desktop/测试数据 2.xlsx"));
javaMailSender.send(mimeMessage);
}
}
4. 遇到的坑
在Test里测试是Ok的,在Controller中注入JavaMailSender时,一直为Null。
问题的关键就是不能在Controller层直接注入JavaMailSender,必须建一个比如MailUtil类,给这个类注入JavaSenderMail,然后再Controller层注入MailUtil就OK了。初学者,现在也不明白为什么。