Spring Email使用手册
Maven坐标
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>核心包和类
- org.springframework.mail
- MailSender(接口)
- SimpleMailMessage
- MailException
- org.springframework.mail.javamail.JavaMailSender(MailSender的实现类)
- MimeMessagePreparator
- MimeMessage
- MimeMessageHelper(MimeMessage的工具类)
- MailSenderAutoConfiguration:自动配置类
主要配置
yaml
spring:
mail:
#发信服务器地址。自动配置类识别到host属性后向容器注册JavaMailSender对象
host: smtp.qq.com
#发信邮箱账号
username: 1092917088@qq.com
#发信邮箱密码
password: 123MIME(Multipurpose Internet Mail Extensions)消息
MIME(Multipurpose Internet Mail Extensions)消息是一种用于电子邮件和其他互联网通信的标准格式。它允许在电子邮件中包含多媒体、文本和其他数据类型。MIME消息可以包含附件、HTML内容、图像、音频和其他多种格式的数据。它是确保电子邮件和其他互联网通信能够以多种格式传输和显示的重要标准之一。
MailSender基础用法
java
@SpringBootTest
public class MailSenderTest {
@Autowired
MailSender mailSender;
@Test
public void sendSimpleMailMessage() {
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setFrom("1092917088@qq.com");
simpleMailMessage.setTo("512745183@qq.com");
simpleMailMessage.setSubject("测试邮件主题");
simpleMailMessage.setText("测试邮件内容");
try {
mailSender.send(simpleMailMessage);
} catch (MailException e) {
System.out.println(e.getMessage());
}
}
}JavaMailSender基础用法
java
@SpringBootTest
public class MailSenderTest {
@Autowired
JavaMailSender javaMailSender;
@Test
public void sendJavaMailMessage() throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage);
mimeMessageHelper.setFrom("1092917088@qq.com");
mimeMessageHelper.setTo("512745183@qq.com");
mimeMessageHelper.setSubject("测试邮件主题");
mimeMessageHelper.setText("测试邮件内容");
javaMailSender.send(mimeMessage);
}
}MimeMessageHelper基础用法
java
// of course you would use DI in any real-world cases
JavaMailSenderImpl sender = new JavaMailSenderImpl();
sender.setHost("mail.host.com");
MimeMessage message = sender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message);
helper.setTo("test@host.com");
helper.setText("Thank you for ordering!");
sender.send(message);可以通过MimeMessageHelper设置邮件附件或内嵌图片资源。
java
//设置邮件附件
FileSystemResource file = new FileSystemResource(new File("c:/Sample.jpg"));
helper.addAttachment("CoolImage.jpg", file);
//设置邮件内嵌图片资源
FileSystemResource res = new FileSystemResource(new File("c:/Sample.jpg"));
helper.addInline("identifier1234", res);搭配模板引擎使用
使用基础api去构建邮件有如下缺点:
- 使用 Java 代码创建基于 HTML 的电子邮件内容非常乏味且容易出错。
- 显示逻辑和业务逻辑之间没有明确的分离。
- 改变邮件内容的显示结构需要编写Java代码、重新编译、重新部署等。 因此,搭配模板引擎使用如Thymeleaf或FreeMarker,而不是使用基础api构建邮件内容。
java
@Service
public class EmailService {
@Autowired
private JavaMailSender javaMailSender;
@Autowired
private TemplateEngine templateEngine;
public void sendThymeleafEmail(String to, String subject, Map<String, Object> model) {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, "UTF-8");
try {
messageHelper.setTo(to);
messageHelper.setSubject(subject);
// Load and process the Thymeleaf template
String emailContent = templateEngine.process("email-template", model);
messageHelper.setText(emailContent, true); // Set the content as HTML
javaMailSender.send(mimeMessage);
} catch (MessagingException e) {
// Handle exceptions
}
}
}