- 内容简介
- 前言
- 第 1 章 第一个 Spring Boot 项目
- 第 2 章 集成 MySQL 数据库
- 第 3 章 集成 Spring Data JPA
- 第 4 章 使用 Thymeleaf 模板引擎
- 第 5 章 Spring Boot 事务支持
- 第 6 章 使用过滤器和监听器
- 第 7 章 集成 Redis 缓存
- 第 8 章 集成 Log4j 日志
- 8.3 使用 Log4j 记录日志
- 第 9 章 Quartz 定时器和发送 Email
- 第 10 章 集成 MyBatis
- 第 11 章 异步消息与异步调用
- 第 12 章 全局异常处理与 Retry 重试
- 第 13 章 集成 MongoDB 数据库
- 第 14 章 集成 Spring Security
- 第 15 章 Spring Boot 应用监控
- 第 16 章 集成 Dubbo 和 Zookeeper
- 第 17 章 多环境配置与部署
- 第 18 章 Spring Boot 原理解析
- 参考文献
9.2 Spring Boot 发送 Email

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 邮箱内容
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论