目录
1.添加邮件任务的依赖启动器
1、配置依赖
添加上述依赖后,Spring Boot自动配置的邮件服务会生效,
在邮件发送任务时,可以直接使用Spring框架提供的JavaMailSender接口,
或者它的实现类JavaMailSenderImpl邮件发送。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2.配置邮件服务
1、配置基本信息
spring.mail.host=smtp.qq.com
spring.mail.port=587
spring.mail.username=158****539@qq.com
spring.mail.password=(QQ的授权码)
spring.mail.default-encoding=UTF-8
spring.mail.properties.mail.smtp.connectiontimeout=5000
spring.mail.properties.mail.smtp.timeout=3000
spring.mail.properties.mail.smtp.writetimeout=5000
2、获取QQ的授权码
(1)打开QQ邮箱,点击设置
(2)点击“账号”
(3)找到POP3服务,开启后即可获取授权码
3.配置邮件发送服务
1、发送纯文本邮件
在服务类中定制邮件信息的发件人地址(From)、收件人地址(To)、邮件标题(Subject)和邮件内容(Text)
编写服务类代码
// 纯文本
public void sendSimpleEmail(String to,String subject,String text) {
// 定制纯文本邮件信息SimplemaileMassage
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(from);//向指定的邮件发送信息
message.setTo(to);
message.setSubject(subject);
message.setText(text);
try {
//发送邮件
mailSender.send(message);
System.out.println("纯文本邮件发送成功");
}catch (MailException e) {
System.out.println("纯文本邮件发送失败"+e.getMessage());
e.printStackTrace();
}
}
在测试类写发送邮件代码
// 纯文本
@Test
public void sendSimpleMailTest() {
String to="158****539@qq.com";
String subject="【纯文本邮件】标题";
String text="Spring Boot纯文本邮件发送内容测试.....";
// 发送纯文本邮件
sendEmailService.sendSimpleEmail(to,subject,text);
}
发送测试
2、发送图片、附件邮件
该方法需要接收的参数除了基本的发送信息外,还包括静态资源唯一标识、静态资源路径和附件路径。
编写服务类代码
// 附件、图片、文本
public void sendComplexEmail(String to,String subject,String text,String filePath,String rscId,String rscPath) {
// 定制复杂邮件信息M
MimeMessage message = mailSender.createMimeMessage();
try {
// 使用MimeMailMessageHelper帮助类,并设置multipart多部件使用为true
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(text,true);
// 设置邮件静态资源
FileSystemResource res = new FileSystemResource(new File(rscPath));
helper.addInline(rscId,res);
// 设置邮件附件
FileSystemResource file = new FileSystemResource(new File(filePath));
String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
helper.addAttachment(fileName, file);
// 发送邮件
mailSender.send(message);
System.out.println("复杂邮件发送成功");
}catch (MessagingException e) {
System.out.println("复杂邮件发送失败"+e.getMessage());
e.printStackTrace();
}
}
编写测试类代码(路径一定要有相应文件,不然发送失败)
// 附件、图片、文本
@Test
public void sendComplexEmailTest() {
String to="158****539@qq.com";
String subject="【复杂邮件】标题";
// 定义邮件内容
StringBuilder text = new StringBuilder();
text.append("<html><head></head>");
text.append("<body><h1>祝大家元旦快乐!</h1>");
// cid为固定写法,rscId自定义的资源唯一标识
String rscId = "img001";
text.append("<img src='cid:" +rscId+"'/></body>");
text.append("</html>");
// 指定静态资源文件和附件路径
String rscPath="D:\\IDEA2023\\lujing\\project\\project16\\src\\main\\resources\\static\\login\\img\\login.jpg";
String filePath="F:\\ASD.txt";
// 发送复杂邮件
sendEmailService.sendComplexEmail(to,subject,text.toString(),
filePath,rscId,rscPath);
}
发送测试
3、发送模板邮件(前置条件:引入Thymeleaf依赖)
编写服务类代码
// 模板
public void sendTemplateEmail(String to, String subject, String content) {
MimeMessage message = mailSender.createMimeMessage();
try {
// 使用MimeMessageHelper帮助类,并设置multipart多部件使用为true
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content, true);
// 发送邮件
mailSender.send(message);
System.out.println("模板邮件发送成功");
} catch (MessagingException e) {
System.out.println("模板邮件发送失败 "+e.getMessage());
e.printStackTrace();}
}
编写测试类代码
// 模板
@Autowired
private TemplateEngine templateEngine;
@Test
public void sendTemplateEmailTest() {
String to="158****539@qq.com";
String subject="【模板邮件】标题";
// 使用模板邮件定制邮件正文内容
org.thymeleaf.context.Context context = new Context();
context.setVariable("username", "石头");
context.setVariable("code", "456123");
// 使用TemplateEngine设置要处理的模板页面
String emailContent = templateEngine.process("emailTemplate_vercode", context);
// 发送模板邮件
sendEmailService.sendTemplateEmail(to,subject,emailContent);
}
发送测试