Spring给我们提供了一个非常好用的发送邮件接口 JavaMailSender
本文主要讲述如何在SpringBoot中使用 JavaMailSender 发送邮件
先创建一个springboot项目,引入JavaMailSender 的依赖
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-mailartifactId>
dependency>
项目最后的结构如下图所示,因为也没有涉及到数据库,图个方便就都写在controller层里面。resource的static中放了个压缩文件和图片,是后面用来测试发送附件和邮件内容中带图片用的
既然是发送邮件,name肯定是有收件人和发件人的。这里我们因为是使用的第三方程序(就是我们写的程序)来发送邮件,所以需要去原邮件服务商哪里去做一些配置,比如我这里使用的是QQ邮箱,我们需要进入QQ邮箱的设置中去开启POP3/SMTP服务
这里需要注意的是这里开启之后会弹出一个邮箱授权码,这个授权码我们需要记下来,后面需要填在配置文件中。
配置文件application.properties如下
spring.mail.host=smtp.qq.com
spring.mail.username=你的邮箱
spring.mail.password=刚才获得的授权码
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.host这里你如果是qq邮箱就是smtp.qq.com,如果是163邮箱就是smtp.163.com
所有的配置都做好了,下面我们先发送一份简单邮件试试
邮件主题:简单邮件1
邮件内容:测试邮件内容1
@RestController
public class SendController {
@Autowired
private JavaMailSender mailSender;
@Value("${spring.mail.username}")
private String from;
@RequestMapping("send1")
public String send1(){
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(from);
message.setTo("目标邮箱");
message.setSubject("主题:简单邮件1");
message.setText("测试邮件内容1");
mailSender.send(message);
return "发送成功";
}
}
在邮件内容中插入图片
@RequestMapping("send2")
public String send2(){
MimeMessage message = mailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo("目标邮箱");
helper.setSubject("带图片的邮件");
helper.setText("123456
下面是图片
", true);
File file = new File(ClassUtils.getDefaultClassLoader().getResource("").getPath()+"static/img/测试.png");
FileSystemResource res = new FileSystemResource(file);
helper.addInline("img110", res);
} catch (MessagingException e) {
System.out.println("邮件创建失败");
e.printStackTrace();
}
mailSender.send(message);
return "发送成功";
}
邮件如下图所示
之前这里使用的qq邮箱作为收件人,结果被坑惨了。刚开始收到的邮件都是破图,查看源码发现src也没有没有图片地址,回去看了一波代码,好久之后终于发现破图的原因了:qq邮箱默认把我的图片屏蔽掉了,然后在收件人下方、正文上方有一行橙红色的警告,点击显示图片,我的天,终于看见图片了。
发送带附件的邮件
@RequestMapping("send3")
public String send3(){
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = null;
try {
helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo("目标邮箱地址");
helper.setSubject("带附件的邮件");
helper.setText("自己看附件了", true);
FileSystemResource file = new FileSystemResource(new File(ClassUtils.getDefaultClassLoader().getResource("").getPath()+"static/file/测试.rar"));
String fileName = file.getFilename();
helper.addAttachment(fileName, file);
} catch (MessagingException e) {
e.printStackTrace();
}
mailSender.send(message);
return "发送成功";
}
参考:使用Spring Boot发送邮件