1 简介
Spring Mail对Java Mail进行了封装,大大简化了邮件的发送,Spring Boot Mail在Spring Mail的基础上对邮件发送再次进行了封装,使邮件发送更加简单。
本文主要包含以下内容
- 发送文本邮件
- 发送带有附件的邮件
- 发送HTML邮件
- 发送图片邮件
- 发送模板邮件
2 示例
先设置好用于发送邮件邮箱的POP3/IMAP/SMTP,记住授权码
2.1 项目搭建
- 新建spring-boot-mail maven项目。
- 加入pom依赖。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>
- 编写配置文件。
# 设置邮箱主机
spring.mail.host=smtp.163.com
# 邮箱名
spring.mail.username=freech1688@163.com
# 开通服务授权码
spring.mail.password=xxx
注意:spring.mail.password此处的密码不是邮箱登录密码,而是开通POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务的授权码,授权码是用于登录第三方邮件
- 创建主启动程序。创建主启动程序。
@SpringBootApplication
public class MailApplication {
public static void main(String[] args) {
SpringApplication.run(MailApplication.class, args);
}
}
- 编写测试类。
@RunWith(SpringRunner.class)
@SpringBootTest
public class MailApplicationTest {
}
2.2 编写实践代码
2.2.1 发送文本邮件
测试类中编写以下代码
@Autowired
private JavaMailSender sender;
//邮件发送者
private String from = "freech1688@163.com";
//邮件接收者
private String to = "569265915@qq.com";
/**
* 发送文本邮件
*/
@Test
public void sendTextEmail() {
SimpleMailMessage message = new SimpleMailMessage();
//发送者
message.setFrom(from);
//接收者
message.setTo(to);
//邮件主题
message.setSubject("文本邮件");
//邮件内容
message.setText("你好,这是一份文本文件");
sender.send(message);
}
运行结果:
2.2.2 发送带有附件的邮件
/**
* 发送带有附件的邮件
*/
@Test
public void sendAttachmentFilesEmail() throws MessagingException {
MimeMessage message = sender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject("带有附件的邮件");
helper.setText("你好,这是一份带有附件的邮件");
//获取文件对象.
FileSystemResource file1 = new FileSystemResource(new File("D:/test.rar"));
//添加附件,切记attachmentFilename要带文件格式后缀,否则无法识别。
helper.addAttachment("attachmentFile1.rar", file1);
//添加多个附件,直接修改一下attachmentFilename。
helper.addAttachment("attachmentFile2.rar", file1);
sender.send(message);
}
运行结果:
2.2.3 发送HTML邮件
@Test
public void sendHtmlMail() throws MessagingException {
MimeMessage message = sender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject("HTML邮件");
String content = new StringBuffer().append("<html>").append("<head>").append("<title>HTML邮件</title>")
.append("</head>").append("<body>").append("<h1>这是一份HTML邮件</h1>").append("</body>").append("</html>").toString();
// 邮件内容,第二个参数指定发送的是HTML格式
helper.setText(content, true);
sender.send(message);
}
运行结果:
2.2.4 发送图片邮件
@Test
public void sendImagesMail() throws MessagingException {
MimeMessage message = sender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject("图片邮件");
String imgPath1 = "D:/images/1.jpg";
String imgPath2 = "D:/images/2.jpg";
String rscId1 = "001";
String rscId2 = "002";
String conntent = "<html><body><h3>带图片的邮件:</h3>图片一:<img style='width:200px;height:200px' src='cid:"+rscId1+"'><br>图片二:</img><img style='width:200px;height:200px' src='cid:"+rscId2+"'></img></body></html>";
helper.setText(conntent, true);
FileSystemResource file1 = new FileSystemResource(new File(imgPath1));
FileSystemResource file2 = new FileSystemResource(new File(imgPath2));
helper.addInline(rscId1,file1);
helper.addInline(rscId2,file2);
sender.send(message);
}
运行结果:
2.2.5 发送模板邮件(freemarker示例)
2.2.5.1 添加模板引擎依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
2.2.5.2 将模板引擎注入到Spring容器中
@Component
public class FreeMarkerConfig {
@Bean
public FreeMarkerConfigurer freeMarkerConfigurer() {
FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
configurer.setTemplateLoaderPath("classpath:templates");
return configurer;
}
}
2.5.5.3 在resources/templates新建template.ftl模板文件
<html>
<body>
<span>您好! ${name}, 感谢您的注册!请点击下面的验证链接完成注册,谢谢您的支持!</span><br>
<a href="https://blog.csdn.net/qwqw3333333/article/details/83538247">点击验证</a>
</body>
</html>
2.5.5.4 编写发送邮件代码
//注入FreeMarkerConfigurer
@Autowired
private FreeMarkerConfigurer freeMarkerConfigurer;
/**
* 发送模板邮件
*/
@Test
public void sendTemplateMail() throws MessagingException, IOException, TemplateException {
MimeMessage message = sender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject("模板邮件");
Map<String, Object> model = new HashMap<>();
model.put("name", "Freech");
freeMarkerConfigurer.setTemplateLoaderPath("classpath:templates");
//加载模板文件
Template template = freeMarkerConfigurer.getConfiguration().getTemplate("template.ftl");
String html = FreeMarkerTemplateUtils.processTemplateIntoString(template, model);
helper.setText(html, true);
sender.send(message);
}
运行结果: