当前位置:   article > 正文

Java - SpringBoot借助Java Mail Sender(基于javax/jakarta.mail)发邮件_jakarta.mail发送邮件

jakarta.mail发送邮件

邮件基础

SMTP 协议全称为 Simple Mail Transfer Protocol,译作简单邮件传输协议,它定义了邮件客户端软件与 SMTP 服务器之间,以及 SMTP 服务器与 SMTP 服务器之间的通信规则。

SMTP 是一个基于 TCP/IP 的应用层协议,有点类似于 HTTP,80端口,SMTP 服务器默认监听的端口号为 25 。

假设从 aaa@qq.com 发送邮件到 bbb@163.com :

aaa@qq.com用户 先将邮件投递到腾讯的邮件服务器
腾讯的邮件服务器将邮件投递到网易的邮件服务器
bbb@163.com用户登录网易的邮件服务器查看邮件

也就是说 aaa@qq.com 用户先将邮件投递到腾讯的 SMTP 服务器这个过程就使用了 SMTP 协议,然后腾讯的 SMTP 服务器将邮件投递到网易的 SMTP 服务器这个过程也依然使用了 SMTP 协议,SMTP 服务器就是用来收邮件。

而 POP3 协议全称为 Post Office Protocol ,译作邮局协议,它定义了邮件客户端与 POP3 服务器之间的通信规则

当邮件到达网易的 SMTP 服务器之后, bbb@163.com 用户需要登录服务器查看邮件。

邮件服务商会为每一个用户提供专门的邮件存储空间,SMTP 服务器收到邮件之后,就将邮件保存到相应用户的邮件存储空间中,如果用户要读取邮件,就需要通过邮件服务商的 POP3 邮件服务器来完成。


邮箱设置

 如果直接在邮件服务商的页面操作自然无需额外操作。

现在我们需要在程序中发邮件,那就得先去账号中开启相应的服务:

首先到电子邮箱的设置页面开启SMTP,获得SMTP的服务器域名和端口号,成功开启后会获得服务密码,这个服务密码需要再程序中使用,用户验证身份,请将其记录下来。


引入依赖

Springboot项目中引入依赖:

I/O下的Java Mail Sender

pom文件中显示:

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

原javax包现改为了jakarta,如果是旧版本则是javax


配置文件

  1. #配置 SMTP 服务器地址
  2. spring.mail.host=smtp.163.com
  3. #SMTP 服务器的端口
  4. spring.mail.port=465
  5. #配置邮箱用户名
  6. spring.mail.username=********@163.com
  7. #配置密码,注意,不是真正的密码,而是刚刚申请到的服务密码
  8. spring.mail.password=*************
  9. #默认的邮件编码
  10. spring.mail.default-encoding=UTF-8
  11. #配饰 SSL 加密工厂
  12. spring.mail.properties.mail.smtp.socketFactoryClass=javax.net.ssl.SSLSocketFactory
  13. #表示开启 DEBUG 模式,这样,邮件发送过程的日志会在控制台打印出来,方便排查错误
  14. spring.mail.properties.mail.debug=true
  15. #官方建议使用 465 端口,而 465 端口是 SSL 协议的,所以不仅要换端口,
  16. #还需要进行 SSL 协议替换。下面是在 application.properties 进行的邮件发送相关配置,
  17. spring.mail.protocol=smtp
  18. spring.mail.properties.mail.smtp.ssl.enable=true
  19. spring.mail.properties.mail.smtp.socketFactory.port=465


发送简单邮件

  1. @Autowired
  2. JavaMailSender javaMailSender;
  3. @Test
  4. public void sendSimpleMail() {
  5. SimpleMailMessage message = new SimpleMailMessage();
  6. message.setSubject("这是一封测试邮件");
  7. message.setFrom("xxx@163.com");
  8. message.setTo("xxx@qq.com");
  9. // message.setCc("xxx@qq.com"); // 普通抄送邮件接收者可以看到邮件都抄送给了哪些人
  10. // message.setBcc("xxx@qq.com"); // 盲抄送邮件接收者则看不到
  11. message.setSentDate(new Date());
  12. message.setText("这是测试邮件的正文");
  13. javaMailSender.send(message);
  14. }


发送带附件的邮件

  1. @Autowired
  2. JavaMailSender javaMailSender;
  3. @Test
  4. public void sendAttachFileMail() throws MessagingException {
  5. MimeMessage mimeMessage = javaMailSender.createMimeMessage();
  6. MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
  7. helper.setSubject("这是一封测试邮件");
  8. helper.setFrom("xxx@163.com");
  9. helper.setTo("xxx@qq.com");
  10. // helper.setCc("xxx@qq.com");
  11. // helper.setBcc("xxx@qq.com");
  12. helper.setSentDate(new Date());
  13. helper.setText("这是测试邮件的正文");
  14. helper.addAttachment("测试图片.jpg", new File("C:\\Users\\Administrator\\Desktop\\1.jpg"));
  15. javaMailSender.send(mimeMessage);
  16. }


发送HTML邮件

  1. @Autowired
  2. JavaMailSender javaMailSender;
  3. @Test
  4. public void sendImgResMail() throws MessagingException {
  5. MimeMessage mimeMessage = javaMailSender.createMimeMessage();
  6. MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
  7. helper.setSubject("这是一封测试邮件");
  8. helper.setFrom("xxx@qq.com");
  9. helper.setTo("xxx@qq.com");
  10. helper.setCc("xxx@qq.com");
  11. // helper.setBcc("xxx@qq.com");
  12. // helper.setSentDate(new Date());
  13. helper.setText("<p>hello 大家好,这是一封测试邮件,这封邮件包含两种图片,分别如下</p><p>第一张图片:</p><img src='cid:p01'/><p>第二张图片:</p><img src='cid:p02'/>", true);
  14. helper.addInline("p01", new FileSystemResource(new File("C:\\Users\\Administrator\\Desktop\\1.jpg")));
  15. helper.addInline("p02", new FileSystemResource(new File("C:\\Users\\Administrator\\Desktop\\2.jpg")));
  16. javaMailSender.send(mimeMessage);
  17. }

这里的邮件 text 是一个 HTML 文本,里边涉及到的图片资源先用一个占位符占着

setText 方法的第二个参数 true 表示第一个参数是一个 HTML 文本。

setText 之后,再通过 addInline 方法来添加图片资源。


使用 Thymeleaf 作邮件模板发送HTML邮件

正常来说,邮件的内容都是比较的丰富的,所以大部分邮件都是通过 HTML 来呈现的,如果直接拼接 HTML 字符串,这样以后不好维护,为了解决这个问题,一般邮件发送,都会有相应的邮件模板。最具代表性的两个模板就是 Freemarker 模板和 Thyemeleaf 模板了

推荐在 Spring Boot 中使用 Thymeleaf 来构建邮件模板。因为 Thymeleaf 的自动化配置提供了一个 TemplateEngine,通过 TemplateEngine 可以方便的将 Thymeleaf 模板渲染为 HTML ,同时,Thymeleaf 的自动化配置在这里是继续有效的 。

引入 Thymeleaf 依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-thymeleaf</artifactId>
  4. </dependency>
  1. <!DOCTYPE html>
  2. <html lang="en" xmlns:th="http://www.thymeleaf.org">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <body>
  8. <p>hello 欢迎加入 xxx 大家庭,您的入职信息如下:</p>
  9. <table border="1">
  10. <tr>
  11. <td>姓名</td>
  12. <td th:text="${username}"></td>
  13. </tr>
  14. <tr>
  15. <td>工号</td>
  16. <td th:text="${num}"></td>
  17. </tr>
  18. <tr>
  19. <td>薪水</td>
  20. <td th:text="${salary}"></td>
  21. </tr>
  22. </table>
  23. <div style="color: #ff1a0e">一起努力创造辉煌</div>
  24. </body>
  25. </html>
  1. @Autowired
  2. JavaMailSender javaMailSender;
  3. @Autowired
  4. TemplateEngine templateEngine;
  5. @Test
  6. public void sendThymeleafMail() throws MessagingException {
  7. MimeMessage mimeMessage = javaMailSender.createMimeMessage();
  8. MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
  9. helper.setSubject("这是一封测试邮件");
  10. helper.setFrom("xxx@163.com");
  11. helper.setTo("xxx@qq.com");
  12. // helper.setCc("xxx@qq.com");
  13. // helper.setBcc("xxx@qq.com");
  14. helper.setSentDate(new Date());
  15. Context context = new Context();
  16. context.setVariable("username", "javaboy");
  17. context.setVariable("num", "000001");
  18. context.setVariable("salary", "99999");
  19. String process = templateEngine.process("mail.html", context);
  20. helper.setText(process, true);
  21. javaMailSender.send(mimeMessage);
  22. }

import org.thymeleaf.context.Context;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/445964
推荐阅读
相关标签
  

闽ICP备14008679号