SpringBoot邮件发送
介绍
邮件发送是一个非常常见的功能,注册时的身份认证、重要通知发送等都会用到邮件发送。Spring中提供了JavaMailSender用来简化邮件配置,Spring Boot则提供了MailSenderAutoConfiguration对邮件的发送做了进一步简化。下面就来看看Spring Boot中如何发送邮件。
QQ邮箱开启服务
以QQ邮箱为例,首先要申请开通POP3/SMTP服务或者IMAP/SMTP服务。SMTP全称为Simple MailTransfer Protocol,译作简单邮件传输协议,它定义了邮件客户端软件与SMTP服务器之间,以及SMTP服务器与SMTP服务器之间的通信规则。
什么是 POP3/IMAP/SMTP 服务
- POP3 (Post Office Protocol - Version 3)协议用于支持使用电子邮件客户端获取并删除在服务器上的电子邮件。
- MAP (Internet Message Access Protocol)协议用于支持使用电子邮件客户端交互式存取服务器上的邮件。
- SMTP (Simple Mail Transfer Protocol)协议用于支持使用电子邮件客户端发送电子邮件。
开启POP3/SMTP服务
网页登录QQ邮箱,点击左上角设置按钮,再点击账户,找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,点击开启按钮,发送短信验证,获取授权码。
什么是授权码
授权码是QQ邮箱用于登录第三方客户端/服务的专用密码,适用于登录以下服务:POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV 服务。
Tips:更改QQ帐号密码会触发授权码过期,需要重新获取新的授权码登录。
发送邮件
引入依赖
使用SpringBoot发送邮件,首先要添加邮件依赖:
1 2 3 4 5
| <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
|
配置yml
1 2 3 4 5 6 7 8 9 10 11 12 13
| spring: mail: host: smtp.qq.com port: 465 username: QQ邮箱 password: 上面获取的授权码 default-encoding: UTF-8 properties: mail: debug: true smtp: socketFactory: class: javax.net.ssl.SSLSocketFactory
|
Tips:服务器地址和端口是可以在邮件的帮助中心看到的(QQ邮箱=>帮助中心=>搜索SSL),端口号可以使用456或587。
发送邮件
编码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| @Component public class MyMailService { @Autowired JavaMailSender javaMailSender; public void sendMail(String from,String to,String cc,String subject,String text){ SimpleMailMessage smm = new SimpleMailMessage(); smm.setFrom(from); smm.setTo(to); smm.setCc(cc); smm.setSubject(subject); smm.setText(text); javaMailSender.send(smm); } }
|
- JavaMailSender是Spring Boot在MailSenderPropertiesConfiguration类中配置好的,该类在Mail自动配置类MailSenderAutoConfiguration中导入,因此这里注入JavaMailSender就可以使用了
- 简单邮件可以直接构建一个SimpleMailMessage对象进行配置,配置完成后,通过JavaMailSender将邮件发送出去
测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| @SpringBootTest public class MyMailServiceTest { @Autowired MyMailService myMailService; @Test public void sendMailTest(){ myMailService.sendMail( "1274604930@qq.com", "1274604930@qq.com", "1274604930@qq.com", "测试发送邮件", "邮件发送成功啦!"); } }
|
测试发送复杂邮件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| @Autowired JavaMailSender javaMailSender;
@Test void test01() throws MessagingException { MimeMessage mimeMessage = javaMailSender.createMimeMessage(); MimeMessageHelper msg = new MimeMessageHelper(mimeMessage, true); String id = "test"; String path = "C:\\Users\\86173\\Desktop\\71(J}4SMX$~3X}0CTIU78FV.png"; msg.setSubject("这是包含图片测试邮件主题"); msg.setText("<h1>图片:</h1><img src='cid:" + id + "'/>", true); FileSystemResource resource = new FileSystemResource(new File(path)); msg.addInline(id, resource); msg.addAttachment("test.png", resource); msg.setFrom("1274604930@qq.com"); msg.setSentDate(new Date()); msg.setTo("1274604930@qq.com"); javaMailSender.send(mimeMessage); }
|
这里使用MimeMessageHelper简化了邮件配置,它的构造方法的第二个参数true表示构造一个multipart message类型的邮件。最后通过addAttachment方法添加附件。
至此,使用SpringBoot实现邮件发送就完成了。