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. CentOS虚拟机和物理机共享文件夹实现

    安装open-vm-tools: yum -y install  open-vm-tools yum -y  install open-vm-tools yum -y install  open-vm ...

  2. activity和fragment之前运行的生命周期

    1.activity生命周期 2.fragment的生命周期 3.对比图 4.测试代码 package com.goso.testapp; import android.app.Activity; i ...

  3. Redis在linux环境下的安装和部署

    官网:http://redis.io          windows版本下载地址https://github.com/MicrosoftArchive/redis/releases 1Redis建议 ...

  4. linux 文件解锁

    //文件 sudo chmod 777 文件名 //文件夹内的文件 sudo chmod 777 文件夹/ * //遍历文件夹下的所有文件 sudo chmod -R 777 文件夹/ *

  5. learning scala 数组和容器

    数组:可变的,可索引的,元素具有相同类型的数据集合 一维数组 scala> val intValueArr = new Array[Int](3)intValueArr: Array[Int] ...

  6. caffe,Inception v2 Check failed: top_shape[j] == bottom[i]->shape(j)

    使用Caffe 跑 Google 的Inception V2 对输入图片的shape有要求,某些shape输进去可能会报错. Inception model中有从conv和pooling层concat ...

  7. 生产者与消费者问题,C++利用bind基于对象实现与面向对象实现

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  8. JSP动态网页

    01.什么是服务器 02.什么是动态网页  动态网页是指在服务器端运行的,使用程序语言设计的交互式网页,它们会根据某种条件的变化,返回不同的网页内容.可以让用户和服务器交互的网站 动态网站可以实现交互 ...

  9. 使用RxSwift 实现登录页面的条件绑定

    我们在使用MVC建构进行开发时,对登录页面用户名密码等进行的处理一般是这样的,点击登录按钮判断用户框以及密码框输入的合法性,用一堆if真是屎一般!或者用textfield的代理来进行响应其实也是屎一般 ...

  10. log4net在release模式下无法生成文件或不写入日志

    在Debug模式一切正常,但是在release模式下log4net不工作,查了很多资料,终于解决.具体做如下检查修改. 1.检查log4net写入日志文件路径是否正确: 2.检查对应日志文件路径是否有 ...