学科分类
目录
Spring Boot开发

发送纯文本邮件

邮件发送任务中,最简单实现的莫过于纯文本邮件的发送。在定制纯文本邮件时,只需要指定收件人邮箱账号、邮件标题和邮件内容即可。下面,先使用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可以看出,指定的收件人邮箱正确接收到了定制的纯文本邮件,这印证了前面编写的纯文本邮件业务实现成功。

点击此处
隐藏目录