返回介绍

9.2 Spring Boot 发送 Email

发布于 2025-04-26 13:53:51 字数 3506 浏览 0 评论 0 收藏

9.2.1 Email 介绍

邮件服务在互联网早期就已经出现,如今已成为人们互联网生活中必不可少的一项服务。邮件发送与接收的过程如下:

(1)发件人使用 SMTP 协议传输邮件到邮件服务器 A。

(2)邮件服务器 A 根据邮件中指定的接收者投送邮件至相应的邮件服务器 B。

(3)收件人使用 POP3 协议从邮件服务器 B 接收邮件。

SMTP(Simple Mail Transfer Protocol)是电子邮件(Email)传输的互联网标准,定义在 RFC 5321,默认使用 25 端口。

POP3(Post Office Protocol - Version 3)主要用于支持使用客户端远程管理在服务器上的电子邮件,定义在 RFC 1939,为 POP 协议的第三版(最新版)。

这两个协议均属于 TCP/IP 协议族的应用层协议,运行在 TCP 层。

发送邮件的需求比较常见,如找回密码、事件通知、向用户发送广告邮件等。SUN 公司给广大 Java 开发人员提供了一款邮件发送和接收的开源类库 JavaMail,支持常用的邮件协议,如 SMTP、POP3、IMAP 等。开发人员使用 JavaMail 编写邮件程序时,不再需要考虑底层的通信细节(如 Socket),而是关注逻辑层面。JavaMail 可以发送各种复杂 MIME 格式的邮件内容,注意 JavaMail 仅支持 JDK4 及以上版本。虽然 JavaMail 是 JDK 的 API,但它并没有直接加入 JDK 中,所以我们需要另外添加依赖。

Spring 提供了非常好用的 JavaMailSender 接口实现邮件发送,在 Spring Boot 的 Starter 模块中已为此提供了自动化配置。

9.2.2 引入依赖

要在 Spring Boot 中集成 Mail,首先需要在 pom.xml 文件中引入所需的依赖,具体代码如下:

     <!-- mail start -->
     <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-mail</artifactId>
     </dependency>

9.2.3 添加 Email 配置

在 pom 文件中引入 Mail 所需的依赖之后,我们需要在 application.properties 文件中添加如下配置信息:

     ###Mail 邮件配置
     ### 邮箱主机
     spring.mail.host=smtp.163.com
     ### 用户名
     spring.mail.username=ay_test@163.com
     ### 设置的授权码
     spring.mail.password=ay12345
     ### 默认编码
     spring.mail.default-encoding=UTF-8
     spring.mail.properties.mail.smtp.auth=true
     spring.mail.properties.mail.smtp.starttls.enable=true
     spring.mail.properties.mail.smtp.starttls.required=true

9.2.4 在定时器中发送邮件

在 Spring Boot 中添加完依赖和配置之后,我们在项目的目录/src/main/java/com. example.demo.mail 下新建邮件服务接口类 SendJunkMailService,具体代码如下:

然后继续在项目的目录/src/main/java/com.example.demo.mail.impl 下新建接口类的实现类 SendJunkMailServiceImpl.java,具体代码如下:

  • @Value:可以将 application.properties 配置文件中的配置设置到属性中。如上面的代码中,将 spring.mail.username 的值 huangwenyi10@163.com 设置给 from 属性。
  • JavaMailSender:邮件发送接口。在 Spring Boot 的 Starter 模块中已为此提供了自动化配置,我们只需要通过注解 @Autowired 注入进来即可使用。

在 9.1.4 节中已经开发了 SendMailQuartz 定时器类,现在我们重新修改该类,让定时器类能够每隔一段时间给数据库的用户发送广告邮件,SendMailQuartz 类具体的修改如下:

9.2.5 测试

代码全部开发完成之后,重新启动项目,发送邮件定时器类 SendMailQuartz,每隔 5 秒(真实项目会设置得比较长,比如 1 天、2 天等)会查询数据库表 ay_test 中的所有用户,并发送广告邮件给对应的用户。我们登录 al_test@163.com 邮箱便可以查看到如图 9-3 和图 9-4 所示的信息。

图 9-3 163 邮箱界面

图 9-4 163 邮箱内容

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。