Spring 对 Java Mail 有很好的支持。因此,Spring Boot 也提供了自动配置的支持。

Spring Boot 集成 Java Mail

Spring Boot 中使用 Java Mail 非常简单方便。修改 pom 文件,添加依赖。

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-mail</artifactId>
  4. </dependency>

在 src/main/resources/application.properties 中配置邮件信息

  1. #email
  2. spring.mail.host=smtp.163.com
  3. spring.mail.username=请输入用户名
  4. spring.mail.password=请输入密码
  5. spring.mail.port=25
  6. spring.mail.protocol=smtp
  7. spring.mail.default-encoding=UTF-8

单元测试

我们通过编写单元测试用例,测试 Java Mail 是否正常工作。值得注意的是,邮件包括几种类型:简单文本的邮件、 HTML 文本的邮件、 内嵌图片的邮件、 包含附件的邮件。

  1. @RunWith(SpringJUnit4ClassRunner.class)
  2. @SpringApplicationConfiguration(WebMain.class)
  3. public class SpringMailTest {
  4. @Autowired
  5. private JavaMailSenderImpl mailSender;
  6. /**
  7. * 发送包含简单文本的邮件
  8. */
  9. @Test
  10. public void sendTxtMail() {
  11. SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
  12. // 设置收件人,寄件人
  13. simpleMailMessage.setTo(new String[] {"lianggzone@163.com"});
  14. simpleMailMessage.setFrom("lianglevel@163.com");
  15. simpleMailMessage.setSubject("Spring Boot Mail 邮件测试【文本】");
  16. simpleMailMessage.setText("这里是一段简单文本。");
  17. // 发送邮件
  18. mailSender.send(simpleMailMessage);
  19. System.out.println("邮件已发送");
  20. }
  21. /**
  22. * 发送包含HTML文本的邮件
  23. * @throws Exception
  24. */
  25. @Test
  26. public void sendHtmlMail() throws Exception {
  27. MimeMessage mimeMessage = mailSender.createMimeMessage();
  28. MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage);
  29. mimeMessageHelper.setTo("lianggzone@163.com");
  30. mimeMessageHelper.setFrom("lianglevel@163.com");
  31. mimeMessageHelper.setSubject("Spring Boot Mail 邮件测试【HTML】");
  32. StringBuilder sb = new StringBuilder();
  33. sb.append("<html><head></head>");
  34. sb.append("<body><h1>spring 邮件测试</h1><p>hello!this is spring mail test。</p></body>");
  35. sb.append("</html>");
  36. // 启用html
  37. mimeMessageHelper.setText(sb.toString(), true);
  38. // 发送邮件
  39. mailSender.send(mimeMessage);
  40. System.out.println("邮件已发送");
  41. }
  42. /**
  43. * 发送包含内嵌图片的邮件
  44. * @throws Exception
  45. */
  46. @Test
  47. public void sendAttachedImageMail() throws Exception {
  48. MimeMessage mimeMessage = mailSender.createMimeMessage();
  49. // multipart模式
  50. MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
  51. mimeMessageHelper.setTo("lianggzone@163.com");
  52. mimeMessageHelper.setFrom("lianglevel@163.com");
  53. mimeMessageHelper.setSubject("Spring Boot Mail 邮件测试【图片】");
  54. StringBuilder sb = new StringBuilder();
  55. sb.append("<html><head></head>");
  56. sb.append("<body><h1>spring 邮件测试</h1><p>hello!this is spring mail test。</p>");
  57. // cid为固定写法,imageId指定一个标识
  58. sb.append("<img src=\"cid:imageId\"/></body>");
  59. sb.append("</html>");
  60. // 启用html
  61. mimeMessageHelper.setText(sb.toString(), true);
  62. // 设置imageId
  63. FileSystemResource img = new FileSystemResource(new File("D:/images/01.jpg"));
  64. mimeMessageHelper.addInline("imageId", img);
  65. // 发送邮件
  66. mailSender.send(mimeMessage);
  67. System.out.println("邮件已发送");
  68. }
  69. /**
  70. * 发送包含附件的邮件
  71. * @throws Exception
  72. */
  73. @Test
  74. public void sendAttendedFileMail() throws Exception {
  75. MimeMessage mimeMessage = mailSender.createMimeMessage();
  76. // multipart模式
  77. MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true, "utf-8");
  78. mimeMessageHelper.setTo("lianggzone@163.com");
  79. mimeMessageHelper.setFrom("lianglevel@163.com");
  80. mimeMessageHelper.setSubject("Spring Boot Mail 邮件测试【附件】");
  81. StringBuilder sb = new StringBuilder();
  82. sb.append("<html><head></head>");
  83. sb.append("<body><h1>spring 邮件测试</h1><p>hello!this is spring mail test。</p></body>");
  84. sb.append("</html>");
  85. // 启用html
  86. mimeMessageHelper.setText(sb.toString(), true);
  87. // 设置附件
  88. FileSystemResource img = new FileSystemResource(new File("D:/images/01.jpg"));
  89. mimeMessageHelper.addAttachment("image.jpg", img);
  90. // 发送邮件
  91. mailSender.send(mimeMessage);
  92. System.out.println("邮件已发送");
  93. }
  94. }

源代码

相关示例完整代码: springboot-action

(完)

如果觉得我的文章对你有帮助,请随意打赏。

Spring Boot 揭秘与实战(七) 实用技术篇 - Java Mail 发送邮件的更多相关文章

  1. Spring Boot 揭秘与实战(七) 实用技术篇 - StateMachine 状态机机制

    文章目录 1. 环境依赖 2. 状态和事件 2.1. 状态枚举 2.2. 事件枚举 3. 状态机配置4. 状态监听器 3.1. 初始化状态机状态 3.2. 初始化状态迁移事件 5. 总结 6. 源代码 ...

  2. Spring Boot 揭秘与实战(七) 实用技术篇 - 异步任务

    文章目录 1. Spring Boot 集成异步任务 2. 单发服务模式 3. 请求应答模式 4. 源代码 Spring 对异步任务具有很好的支持.这篇文章,我们透过 Spring Boot 来讲解下 ...

  3. Spring Boot 揭秘与实战(七) 实用技术篇 - FreeMarker 模板引擎

    文章目录 1. FreeMaker 代替 JSP 作为页面渲染 2. 生成静态文件 3. 扩展阅读 4. 源代码 Spring Boot 提供了很多模板引擎的支持,例如 FreeMarker.Thym ...

  4. Spring Boot 揭秘与实战 附录 - Spring Boot 公共配置

    Spring Boot 公共配置,配置 application.properties/application.yml 文件中. 摘自:http://docs.spring.io/spring-boot ...

  5. Spring Boot 揭秘与实战 自己实现一个简单的自动配置模块

    文章目录 1. 实战的开端 – Maven搭建 2. 参数的配置 - 属性参数类 3. 真的很简单 - 简单的服务类 4. 自动配置的核心 - 自动配置类 5. spring.factories 不要 ...

  6. Spring Boot 揭秘与实战 源码分析 - 工作原理剖析

    文章目录 1. EnableAutoConfiguration 帮助我们做了什么 2. 配置参数类 – FreeMarkerProperties 3. 自动配置类 – FreeMarkerAutoCo ...

  7. Spring Boot 揭秘与实战 源码分析 - 开箱即用,内藏玄机

    文章目录 1. 开箱即用,内藏玄机 2. 总结 3. 源代码 Spring Boot提供了很多”开箱即用“的依赖模块,那么,Spring Boot 如何巧妙的做到开箱即用,自动配置的呢? 开箱即用,内 ...

  8. Spring Boot 揭秘与实战(九) 应用监控篇 - 自定义监控端点

    文章目录 1. 继承 AbstractEndpoint 抽象类 2. 创建端点配置类 3. 运行 4. 源代码 Spring Boot 提供的端点不能满足我们的业务需求时,我们可以自定义一个端点. 本 ...

  9. Spring Boot 揭秘与实战(九) 应用监控篇 - HTTP 健康监控

    文章目录 1. 内置 HealthIndicator 监控检测 2. 自定义 HealthIndicator 监控检测 3. 源代码 Health 信息是从 ApplicationContext 中所 ...

随机推荐

  1. Leetcode 1003. 检查替换后的词是否有效

    1003. 检查替换后的词是否有效  显示英文描述 我的提交返回竞赛   用户通过次数245 用户尝试次数273 通过次数249 提交次数500 题目难度Medium 给定有效字符串 "ab ...

  2. 八、持久层框架(MyBatis)

    一.基于MyBatis的CRUD 1.首先是配置文件Category.xml修改 一次性修改配置文件Category.xml,提供CRUD对应的sql语句. <?xml version=&quo ...

  3. Apache+Tomcat+mod_jk配置教程

    0.说明 首先我们要弄明白mod_jk的作用是反向代理,而其实使用httpd.conf中的<VirtualHost>标签就可以实现反向代理,为什么还要多搞个mod_jk那么麻烦做反向代理. ...

  4. etymon word air aero aeri aer ag agreement walk joint trick skill chief forget out~1

      1● air 2● aero 3● aeri 4● aer 空气 充气       1● ag     做,代理做   =====>agency       1● agr 2● agri 3 ...

  5. Linux 硬件信息命令

    # 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数cat /proc/cpuinfo| g ...

  6. python 利用turtle库绘制七段数码管的方式,绘制当前事件(时分秒00:00:00)

    # coding:utf-8# 绘制七段数码管,显示当前时间import timeimport turtle as tt # 绘制间隔def drawGap(): tt.penup() tt.fd(3 ...

  7. shell script auto generate the relevant header information

    first : add follow context in   /etc/vim/vimrc set ignorecaseset cursorlineset autoindentautocmd Buf ...

  8. 前端vue项目-关于下载文件pdf/excel(三)

    最近在做一些需求,需要下载一些文件信息,最频繁的就是下载excel文件到本地了 看过了很多方法,做个整理吧哈哈哈哈 参考的文章链接: https://www.cnblogs.com/jiangweic ...

  9. 多线程处理慢sql查询小笔记~

    多线程处理慢sql查询以及List(Array)的拆分 系统数据量不大,但是访问速度特别慢,使用多线程优化一下!!! 优化结果:访问时间缩短了十几秒  25s --> 8s 一.List的拆分: ...

  10. ubuntu 删除开机系统引导,设置快速开机和安静开机

    1.隐藏开机选择界面 1.sudo gedit /etc/default/grub GRUB_HIDDEN_TIMEOUT=0 GRUB_HIDDEN_TIMEOUT_QUIET=true //隐藏开 ...