专栏名称: 纯洁的微笑
分享微服务实践与Java技术干货、偶尔讲讲故事。在人工智能的时代,一起学习微服务架构演进和大数据治理。
目录
相关文章推荐
一念行者  ·  以大海而存在,让波浪境生境灭 ·  昨天  
51好读  ›  专栏  ›  纯洁的微笑

Spring Boot (十):邮件服务

纯洁的微笑  · 公众号  ·  · 2019-07-02 09:09

正文

Spring Boot 仍然在狂速发展,才几个多月没有关注,现在看官网已经到 2.1.0.RELEASE 版本了。准备慢慢在写写 Spring Boot 相关的文章,本篇文章使用 Spring Boot 最新版本 2.1.0 进行开发。

发送邮件应该是网站的必备功能之一,什么注册验证,忘记密码或者是给用户发送营销信息。最早期的时候我们会使用 JavaMail 相关 api 来写发送邮件的相关代码,后来 Spring 推出了 JavaMailSender 更加简化了邮件发送的过程,在之后 Spring Boot 对此进行了封装就有了现在的 spring - boot - starter - mail ,本章文章的介绍主要来自于此包。

简单使用

1、pom 包配置

pom 包里面添加 spring - boot - starter - mail 包引用

  1. org.springframework.boot

  2. spring-boot-starter-mail

2、在 application.properties 中添加邮箱配置

  1. spring.mail.host=smtp.qiye.163.com //邮箱服务器地址

  2. spring.mail.username=xxx@oo.com //用户名

  3. spring.mail.password=xxyyooo //密码

  4. spring.mail.default-encoding=UTF-8


  5. mail.fromMail.addr=xxx@oo.com //以谁来发送邮件

3、编写 mailService,这里只提出实现类。

  1. @Component

  2. public class MailServiceImpl implements MailService{


  3. private final Logger logger = LoggerFactory.getLogger(this.getClass());


  4. @Autowired

  5. private JavaMailSender mailSender;


  6. @Value("${mail.fromMail.addr}")

  7. private String from;


  8. @Override

  9. public void sendSimpleMail(String to, String subject, String content) {

  10. SimpleMailMessage message = new SimpleMailMessage();

  11. message.setFrom(from);

  12. message.setTo(to);

  13. message.setSubject(subject);

  14. message.setText(content );


  15. try {

  16. mailSender.send(message);

  17. logger.info("简单邮件已经发送。");

  18. } catch (Exception e) {

  19. logger.error("发送简单邮件时发生异常!", e);

  20. }


  21. }

  22. }

4、编写 test 类进行测试

  1. @RunWith (SpringRunner.class)

  2. @SpringBootTest

  3. public class MailServiceTest {


  4. @Autowired

  5. private MailService MailService;


  6. @Test

  7. public void testSimpleMail() throws Exception {

  8. MailService.sendSimpleMail("[email protected]","test simple mail"," hello this is simple mail");

  9. }

  10. }

至此一个简单的文本发送就完成了。

加点料

但是在正常使用的过程中,我们通常在邮件中加入图片或者附件来丰富邮件的内容,下面讲介绍如何使用 Spring Boot 来发送丰富的邮件。

发送 html 格式邮件

其它都不变在 MailService 添加 sendHtmlMail 方法.

  1. public void sendHtmlMail(String to, String subject, String content) {

  2. MimeMessage message = mailSender.createMimeMessage();


  3. try {

  4. //true表示需要创建一个multipart message

  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. mailSender.send(message);

  11. logger.info("html邮件发送成功");

  12. } catch (MessagingException e) {

  13. logger.error("发送html邮件时发生异常!", e);

  14. }

  15. }

在测试类中构建 html 内容,测试发送

  1. @Test

  2. public void testHtmlMail() throws Exception {

  3. String content="\n" +

  4. "\n" +

  5. "

    hello world ! 这是一封Html邮件!

    \n" +

  6. "\n" +

  7. "";

  8. MailService.sendHtmlMail("[email protected]","test simple mail",content);

  9. }

发送带附件的邮件

在 MailService 添加 sendAttachmentsMail 方法.

  1. public void sendAttachmentsMail(String to, String subject, String content, String filePath){

  2. MimeMessage message = mailSender.createMimeMessage();


  3. try {

  4. MimeMessageHelper helper = new MimeMessageHelper(message, true);

  5. helper.setFrom(from);

  6. helper.setTo(to);

  7. helper.setSubject(subject);

  8. helper.setText(content, true);


  9. FileSystemResource file = new FileSystemResource(new File(filePath));

  10. String fileName = filePath.substring(filePath.lastIndexOf(File.separator));

  11. helper.addAttachment(fileName, file);


  12. mailSender.send(message);

  13. logger.info("带附件的邮件已经发送。");

  14. } catch (MessagingException e) {

  15. logger .error("发送带附件的邮件时发生异常!", e);

  16. }

  17. }

添加多个附件可以使用多条 helper . addAttachment ( fileName , file )

在测试类中添加测试方法

  1. @Test

  2. public void sendAttachmentsMail() {

  3. String filePath="e:\\tmp\\application.log";

  4. mailService.sendAttachmentsMail("[email protected]", "主题:带附件的邮件" , "有附件,请查收!", filePath);

  5. }

发送带静态资源的邮件

邮件中的静态资源一般就是指图片,在 MailService 添加 sendAttachmentsMail 方法.

  1. public void sendInlineResourceMail(String to, String subject, String content, String rscPath, String rscId){

  2. MimeMessage message = mailSender.createMimeMessage();


  3. try {

  4. MimeMessageHelper helper = new MimeMessageHelper(message, true);

  5. helper.setFrom(from);

  6. helper.setTo(to);

  7. helper.setSubject(subject);

  8. helper.setText(content, true);


  9. FileSystemResource res = new FileSystemResource(new File(rscPath));

  10. helper.addInline(rscId, res);


  11. mailSender.send(message);

  12. logger.info("嵌入静态资源的邮件已经发送。");

  13. } catch (MessagingException e) {

  14. logger.error("发送嵌入静态资源的邮件时发生异常!", e);

  15. }

  16. }







请到「今天看啥」查看全文