发送纯文本邮件
邮件发送任务中,最简单实现的莫过于纯文本邮件的发送。在定制纯文本邮件时,只需要指定收件人邮箱账号、邮件标题和邮件内容即可。下面,先使用Spring Boot框架实现纯文本邮件的发送任务。
(1)添加邮件服务依赖启动器
打开项目chapter09的pom.xml文件,在该依赖文件中添加Spring Boot整合支持的邮件服务依赖启动器spring-boot-starter-mail,示例代码如下。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
当添加上述依赖后,Spring Boot自动配置的邮件服务会生效,在邮件发送任务时,可以直接使用Spring框架提供的JavaMailSender接口或者它的实现类JavaMailSenderImpl邮件发送。
(2)添加邮件服务配置
在项目中添加邮件服务依赖启动器后,还需要在配置文件中添加邮件服务相关的配置,确保邮件服务正常发送。打开项目的application.properties全局配置文件,在该文件中添加发件人邮箱服务配置和邮件服务超时的相关配置,内容如文件1所示。
文件1 application.properties
1 # 发件人邮服务器相关配置
2 spring.mail.host=smtp.qq.com
3 spring.mail.port=587
4 # 配置个人QQ账户和密码(密码是加密后的授权码)
5 spring.mail.username=2127269781@qq.com
6 spring.mail.password=ijdjokspcbnzfbfa
7 spring.mail.default-encoding=UTF-8
8 # 邮件服务超时时间配置
9 spring.mail.properties.mail.smtp.connectiontimeout=5000
10 spring.mail.properties.mail.smtp.timeout=3000
11 spring.mail.properties.mail.smtp.writetimeout=5000
文件1中,主要添加了发件人邮箱服务配置和邮件服务超时配置两部分内容。其中,发件人邮箱服务配置中,必须明确发件人邮箱对应的服务器主机(host)、端口号(port)以及用于发件人认证的用户名(username)和密码(password),本示例中配置的发件人邮箱是QQ邮箱,如果读者配置的是其他邮箱(例如163、搜狐等),必须更改对应的主机、端口号以及用户名和密码;另外,配置的QQ邮箱密码不是原始密码,而是通过手机短信验证后的授权码。
邮件服务超时配置可以灵活更改超时时间,如果没有配置邮件服务超时的话,Spring Boot内部默认超时是无限制的,这可能造成线程被无响应的邮件服务器长时间阻塞。
(3)定制邮件发送服务
先以发送纯文本邮件为例,在之前创建的com.itheima.service的包中,新建一个邮件发送任务管理的业务处理类SendEmailService,并在该类中编写一个发送纯文本邮件的业务方法,内容如文件2所示。
文件2 SendEmailService.java
1 import org.springframework.beans.factory.annotation.Autowired;
2 import org.springframework.beans.factory.annotation.Value;
3 import org.springframework.mail.MailException;
4 import org.springframework.mail.SimpleMailMessage;
5 import org.springframework.mail.javamail.JavaMailSenderImpl;
6 import org.springframework.stereotype.Service;
7 @Service
8 public class SendEmailService {
9 @Autowired
10 private JavaMailSenderImpl mailSender;
11 @Value("${spring.mail.username}")
12 private String from;
13 public void sendSimpleEmail(String to,String subject,String text){
14 // 定制纯文本邮件信息SimpleMailMessage
15 SimpleMailMessage message = new SimpleMailMessage();
16 message.setFrom(from);
17 message.setTo(to);
18 message.setSubject(subject);
19 message.setText(text);
20 try {
21 // 发送邮件
22 mailSender.send(message);
23 System.out.println("纯文本邮件发送成功");
24 } catch (MailException e) {
25 System.out.println("纯文本邮件发送失败 "+e.getMessage());
26 e.printStackTrace();
27 }
28 }
29 }
文件2中,编写了一个发送纯文本邮件的sendSimpleEmail()方法,在方法中通过SimpleMailMessage类定制了邮件信息的发件人地址(From)、收件人地址(To)、邮件标题(Subject)和邮件内容(Text),最后使用JavaMailSenderImpl的send()方法实现纯文本邮件发送。
(4)纯文本邮件发送效果测试
在项目测试类Chapter09ApplicationTests中调用SendEmailService类中编写的纯文本邮件发送方法实现邮件发送效果测试,内容如文件3所示。
文件3 Chapter09ApplicationTests.java
1 import com.itheima.service.SendEmailService;
2 import org.junit.Test;
3 import org.junit.runner.RunWith;
4 import org.springframework.beans.factory.annotation.Autowired;
5 import org.springframework.boot.test.context.SpringBootTest;
6 import org.springframework.test.context.junit4.SpringRunner;
7 @RunWith(SpringRunner.class)
8 @SpringBootTest
9 public class Chapter09ApplicationTests {
10 @Autowired
11 private SendEmailService sendEmailService;
12 @Test
13 public void sendSimpleMailTest() {
14 String to="2127269781@qq.com";
15 String subject="【纯文本邮件】标题";
16 String text="Spring Boot纯文本邮件发送内容测试.....";
17 // 发送纯文本邮件
18 sendEmailService.sendSimpleEmail(to,subject,text);
19 }
20 }
文件3中,先定制了纯文本邮件发送方法所需要的参数(示例中定制了给自己邮箱发送邮件),然后调用业务方法实现了纯文本邮件发送。
直接启动单元测试方法sendSimpleMailTest(),控制台效果如图1所示。
图1 纯文本邮件发送效果
从图1可以看出,控制台打印了“纯文本邮件发送成功”的提示信息,纯文本邮件打开收件人邮箱查看刚发送的邮件,效果如图2所示。
图2 纯文本邮件发送效果
从图2可以看出,指定的收件人邮箱正确接收到了定制的纯文本邮件,这印证了前面编写的纯文本邮件业务实现成功。