Spring框架提供了一种使用JavaMailSender接口发送电子邮件的简单抽象方法,而Spring Boot为其提供了自动配置以及启动程序模块。
1.准备工作
1.1 开启第三方登录邮箱
以qq邮箱为例:
进入邮箱设置----------帐户页面,并打开以下全部服务
1.2 引入依赖
在pom.xml文件中添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
也可在新建项目时直接勾选以下依赖:
2.配置MailSender
我们需要作出以下必要配置,否则无法发送邮件:
- 配置邮箱用户名:
填写自己的邮箱账号 - 配置邮箱密码
填写授权码(此授权码有效期直至你下次修改密码)
- 配置邮箱服务器
qq邮箱是smtp.qq.com - 使能ssl连接
此外,还需要设置超时参数,因为某些默认超时值是无限的,可能需要更改此值,以避免线程被无响应的邮件服务器阻塞。
配置如下:
spring:
mail:
username: xxxx@qq.com
password: xxxxx
host: smtp.qq.com
properties:
smtp.ssl.enable: true
mail.smtp.connectiontimeout: 5000
mail.smtp.timeout: 3000
mail.smtp.writetimeout: 5000
3.发送简单邮件
发送简单邮件使用SimpleMailMessage构造邮件内容,使用JavaMailSender进行发送。代码如下:
@Autowired
JavaMailSenderImpl javaMailSender;
@Test
void testSimpleMail() {
//封装简单邮件内容
SimpleMailMessage message = new SimpleMailMessage();
message.setSubject("这是邮件主题");
message.setText("这是邮件内容");
//发件人
message.setFrom("xxxxx@qq.com");
//收件人
message.setTo("xxxx@163.com");
javaMailSender.send(message);
}
成功收到邮件:
4.发送附件
发送附件使用的是MimeMessageHelper对象构造邮件,代码如下:
@Test
void testMimeMail() {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = null;
try {
mimeMessageHelper = new MimeMessageHelper(mimeMessage,true);
mimeMessageHelper.setSubject("这是带附件的邮件主题");
mimeMessageHelper.setText("这是邮件内容");
//发送附件
mimeMessageHelper.addAttachment("12月员工加班就餐补助.xls", new File("/Users/yky/Documents/12月公司员工加班就餐补助.xls"));
//发件人
mimeMessageHelper.setFrom("xxxxxx@qq.com");
//收件人
mimeMessageHelper.setTo("xxxxxx@163.com");
javaMailSender.send(mimeMessage);
} catch (MessagingException e) {
e.printStackTrace();
}
}
效果:
5.发送内联资源
发送内联资源同样是使用MimeMessageHelper对象来构造邮件,代码如下:
@Test
void testMimeMailSendInlinePic() {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = null;
try {
//true标志代表发送富文本信息或带附件的信息
mimeMessageHelper = new MimeMessageHelper(mimeMessage,true);
mimeMessageHelper.setSubject("这是邮件主题");
//true标志代表发送HTML内容
mimeMessageHelper.setText("<html><body><img src='cid:identifier1234'></body></html>", true);
//拿到资源文件并绑定cid
FileSystemResource res = new FileSystemResource(new File("/Users/yky/Downloads/cat.jpg"));
mimeMessageHelper.addInline("identifier1234", res);
//发件人
mimeMessageHelper.setFrom("xxxxxxx@qq.com");
//收件人
mimeMessageHelper.setTo("xxxxx@163.com");
javaMailSender.send(mimeMessage);
} catch (MessagingException e) {
e.printStackTrace();
}
}
效果:
关于邮件的讲解就到这了,欢迎大家在评论区进行讨论。