准备环境
springboot官网中是如下这样描述的:
也就是说,当我们在项目的配置文件中定义了spring.mail.host
也即邮件服务器,并且引入了相关jar
包时,springboot
会自动注入一个JavaMailSender
的bean
来给我们使用。所以:
在pom.xml
中加入:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
在application.yml
中加入:
spring:
mail:
host: smtp.163.com
这步做完之后我们可以写个controller
来测试是否存在javaMailSender
这个bean
@Controller
@RequestMapping("/test")
public class TestController {
@Resource
private JavaMailSender javaMailSender;
@ResponseBody
@GetMapping("/mail")
public String testMail(){
return javaMailSender==null?"不存在":javaMailSender.toString();
}
}
发送邮件
上述步骤中我们可以得到javaMailSender
这个对象来帮助我们完成邮件的发送。首先,我们需要完善相关的配置
spring:
mail:
#163邮件服务器
host: smtp.163.com
#使用smtp协议
protocol: smtp
#邮箱地址
username: xxx@163.com
#邮箱密码
password: xxx
下面是简单的发送邮件示例:
@Controller
@RequestMapping("/test")
public class TestController {
@Resource
private TemplateEngine templateEngine;
@Resource
private JavaMailSender javaMailSender;
//简单的发送文字内容
@ResponseBody
@GetMapping("/mail1")
public String testMail1() throws MessagingException {
MimeMessagePreparator preparator = new MimeMessagePreparator() {
public void prepare(MimeMessage mimeMessage) throws Exception {
mimeMessage.setRecipient(Message.RecipientType.TO,
new InternetAddress("xxxx@163.com"));
//此处是发送方的邮件地址,需要和配置文件中的一致
mimeMessage.setFrom(new InternetAddress("xxxx@163.com"));
mimeMessage.setText("测试邮件");
mimeMessage.setSubject("测试测试");
}
};
javaMailSender.send(preparator);
return "success";
}
//在邮件中添加附件
@ResponseBody
@GetMapping("/mail2")
public String testMail2() throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
//true代表需要上传附件
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage,true);
mimeMessageHelper.setSubject("附件测试");
mimeMessageHelper.setFrom("xxx@163.com");
mimeMessageHelper.setTo("xxx@163.com");
mimeMessageHelper.setText("这是附件测试");
FileSystemResource file = new FileSystemResource(new File("c:/test.rar"));
mimeMessageHelper.addAttachment("附件测试.rar", file);
javaMailSender.send(mimeMessage);
return "success";
}
//将发送内容渲染到html模板中
@ResponseBody
@GetMapping("/mail3")
public String testMail3() throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
//true代表需要上传附件
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage,true);
mimeMessageHelper.setSubject("模板测试");
mimeMessageHelper.setFrom("xxxx@163.com");
mimeMessageHelper.setTo("xxxx@163.com");
mimeMessageHelper.setText(generateStrFromTemplate("这是模板测试"),true);
javaMailSender.send(mimeMessage);
return "success";
}
private String generateStrFromTemplate(String message){
Context context = new Context();
context.setVariable("message", message);
//使用thymeleaf模板引擎渲染内容
//此处渲染的文件默认以项目的templates文件夹作为根路径
return templateEngine.process("mail/mailTemplate", context);
}
}
mailTemplates.html
文件如下所示:
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
h1{
color: red;
}
</style>
</head>
<body>
<h1>[[${message}]]</h1>
</body>
</html>