Spring Boot简单实现发送邮件功能
我们先看发送邮件所需要的依赖
1 <dependency> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-mail</artifactId> 4 </dependency>
然后是邮件服务器的配置
spring.mail.host=smtp.163.com spring.mail.username=*********@163.com spring.mail.password=******** //授权码 spring.mail.default-encoding=utf-8 mail.fromMail.addr=******
在这里我使用的是163免费邮箱,各类邮箱服务器地址请参考 https://blog.csdn.net/lingduo24/article/details/81137773
在密码这里我遇到了一个坑,就是你需要去开启授权并设置授权码,最后使用授权码来登陆连接
至此,准备工作已经完成,接下来看发送邮件的方法类
@Component @Slf4j public class MailService { @Autowired private JavaMailSender mailSender; @Value("${mail.fromMail.addr}") private String from;
第一种是发送最简单的邮件,即一段文本,方法如下
public void sendSimpleMail(String to, String subject, String content) { SimpleMailMessage message = new SimpleMailMessage(); message.setFrom(from); message.setTo(to); message.setSubject(subject); message.setText(content); try { mailSender.send(message); log.error("简单邮件已经发送。"); } catch (Exception e) { log.error("发送简单邮件时发生异常!",e); } }
测试方法如下
1 @RunWith(SpringRunner.class) 2 @SpringBootTest 3 public class MailServiceTest { 4 5 @Autowired 6 private MailService mailService; 7 8 @Autowired 9 private TemplateEngine templateEngine; 10 11 @Test 12 public void sendSimpleMail() { 13 mailService.sendSimpleMail("**********@qq.com","test simple mail","hello this is simple mail"); 14 }
第二种是发送一段HTML格式的邮件,方法如下
1 public void sendHtmlMail(String to, String subject, String content) { 2 MimeMessage message = mailSender.createMimeMessage(); 3 4 try { 5 MimeMessageHelper helper = new MimeMessageHelper(message, true); 6 helper.setFrom(from); 7 helper.setTo(to); 8 helper.setSubject(subject); 9 helper.setText(content, true); 10 11 mailSender.send(message); 12 log.error("HTML邮件已经发送。"); 13 } catch (Exception e) { 14 log.error("发送HTML邮件时发生异常!",e); 15 } 16 }
测试方法如下
1 @Test 2 public void sendHtmlMail() { 3 String content = "<html>\n" + 4 "<body>\n" + 5 "<h3>Hello World!这是一封HTML邮件!</h3>\n" + 6 "</body>\n" + 7 "</html>"; 8 mailService.sendHtmlMail("************","test html mail",content); 9 }
第三种是发送模板邮件,在这里我以thymeleaf为模板,我们首先添加thymeleaf的依赖
1 <dependency> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-thymeleaf</artifactId> 4 </dependency>
然后在resources\templates路径下添加HTML文件EmailTemplate.html
1 <!DOCTYPE html> 2 <html lang="zh" xmlns:th="http://www.thymeleaf.org"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body> 8 尊敬的<span th:text="${name}"/>, 9 您好,这是一封模板邮件, 10 </body> 11 </html>
发送模板邮件时我们使用的依然是发送HTML的方法,只是对HTML进行了处理,测试方法如下
@Test public void sendTemplateMail() { Context context = new Context(); context.setVariable("name","******"); String emailContent = templateEngine.process("EmailTemplate",context); mailService.sendHtmlMail("************","test template mail",emailContent); }
第四种是发送带附件的邮件,方法如下
1 public void sendAttachmentsMail(String to, String subject, String content, String filePath) { 2 MimeMessage message = mailSender.createMimeMessage(); 3 4 try { 5 6 MimeMessageHelper helper = new MimeMessageHelper(message,true); 7 helper.setFrom(from); 8 helper.setTo(to); 9 //helper.setCc(); 10 //helper.setBcc(); 11 helper.setSubject(subject); 12 helper.setText(content,true); 13 14 FileSystemResource file = new FileSystemResource(new File(filePath)); 15 String fileName = filePath.substring(filePath.lastIndexOf(File.separator)); 16 helper.addAttachment(fileName,file); 17 18 mailSender.send(message); 19 log.error("带附件邮件已经发送。"); 20 } catch (MessagingException e) { 21 log.error("带附件邮件发送发生异常!",e); 22 } 23 }
当有多个附件时,我们可以多次使用addAttachment方法,测试方法如下
@Test public void sendAttachmentsMail() { String filePath = "*****************"; mailService.sendAttachmentsMail("*************@qq.com","test attachment email","有附件,请注意查收!",filePath); }
以上就是简单使用Springboot发送邮件的四种方法,所有测试方法亲测无误
欢迎指正交流!