Spring提供了非常好用的JavaMailSender
接口实现邮件发送。在Spring Boot的Starter模块中也为此提供了自动化配置。
首先先引入邮件发送所需要的依赖
版本1.5.1(Jan 30, 2017更新的)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>1.5.1.RELEASE</version>
</dependency>
在application.properties
中配置相应的属性内容。我把属性文件改为yaml文件
host: smtp.qq.com
是发件人使用发邮件的电子信箱服务器,如果是163邮箱就改成host: smtp.163.com
spring:
mail:
host: smtp.qq.com
username: 发送方邮箱
password: QQ邮箱的话就是发送方的授权码
properties:
mail:
smtp:
auth: true//这样才能通过验证
starttls:
enable: true
required: true
编写邮件发送测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTests {
@Autowired
private JavaMailSender javaMailSender;
@Test
public void sendAttachmentsMail() throws Exception {
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setFrom("发送方邮箱");
helper.setTo("接收方邮箱");
helper.setSubject("主题:有附件");
helper.setText("有附件的邮件");
mailSender.send(mimeMessage);
}
由于Spring Boot的starter模块提供了自动化配置,所以在引入了spring-boot-starter-mail
依赖之后,会根据配置文件中的内容去创建JavaMailSender
实例,因此我们可以直接在需要使用的地方直接@Autowired
来引入邮件发送对象。
然后运行后可能会出现这个异常
org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is javax.mail.AuthenticationFailedException: 530 Error: A secure connection is requiered(such as ssl).
More information at http://service.mail.qq.com/cgi-bin/help?id=28
原因:
发送方必须要开启smtp,获取到的授权码,开启方法如下:
https://service.mail.qq.com/cgi-bin/help?subtype=1&&no=1001256&&id=28
执行测试: