使用springboot发送邮件之前,要开启POP3和SMTP协议,需要获得邮件服务器的授权码,这里以qq邮箱为例,展示获取授权码的过程:点击设置,选择账户
往下拉,开启即可,记得保存下授权码
1.添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2.yml配置一下
spring:
mail:
# 配置 SMTP 服务器地址
host: smtp.qq.com
# 发送者邮箱
username: 18xxxxxx25@qq.com
# 配置密码,注意不是真正的密码,而是刚刚申请到的授权码
password: jfwxxxxxpetbjha
# 端口号465或587
port: 587
# 默认的邮件编码为UTF-8
default-encoding: UTF-8
# 配置SSL 加密工厂
properties:
mail:
smtp:
socketFactoryClass: javax.net.ssl.SSLSocketFactory
#表示开启 DEBUG 模式,这样,邮件发送过程的日志会在控制台打印出来,方便排查错误
debug: true
3.编写测试类,运行即可
@Autowired
JavaMailSender javaMailSender;
@Test
void contextLoads() {
// 构建一个邮件对象
SimpleMailMessage message = new SimpleMailMessage();
// 设置邮件主题
message.setSubject("这是测试邮箱主题");
// 设置邮件发送者,这个跟application.yml中设置的要一致
message.setFrom("185xxx325@qq.com");
// 设置邮件接收者,可以有多个接收者,中间用逗号隔开,以下类似
// message.setTo("10*****16@qq.com","12****32*qq.com");
message.setTo("1xxxxx812@qq.com");
// // 设置邮件抄送人,可以有多个抄送人
message.setCc("xxxxxxqq.com");
// // 设置隐秘抄送人,可以有多个
message.setBcc("xxxx@qq.com");
// 设置邮件发送日期
message.setSentDate(new Date());
// 设置邮件的正文
message.setText("这是测试邮箱正文");
// 发送邮件
javaMailSender.send(message);
}
4.编写带附件的邮件
@Autowired
JavaMailSender javaMailSender;
@Test
void contextLoads() throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
//true代表邮件可以添加附件
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
//邮件标题
helper.setSubject("这是一个测试的邮件标题");
//寄邮件的邮箱
helper.setFrom("1851xx325@qq.com");
//收邮件的邮箱
helper.setTo("chengxxxx000@qq.com");
helper.setSentDate(new Date());
//邮件正文
helper.setText("这是正文");
// 第一个参数是自定义的名称,后缀需要加上,第二个参数是文件的位置
helper.addAttachment("资料.xlsx",new File("C:\\Users\\c'q\\Desktop\\java-excel.xlsx"));
// 发送邮件
javaMailSender.send(mimeMessage);
}
5.编写带图片的邮件
@Autowired
JavaMailSender javaMailSender;
@Test
void contextLoads() throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
//true代表邮件可以添加附件
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
//邮件标题
helper.setSubject("这是一个测试的邮件标题");
//寄邮件的邮箱
helper.setFrom("185xx7325@qq.com");
//收邮件的邮箱
helper.setTo("chengxxx000@qq.com");
helper.setSentDate(new Date());
//邮件正文
// src='cid:p01' 占位符写法 ,第二个参数true表示这是一个html文本
helper.setText("<p>hello 大家好,这是一封测试邮件,这封邮件包含两种图片,分别如下</p><p>第一张图片:</p><img src='cid:p01'/><p>第二张图片:</p><img src='cid:p02'/>",true);
// 第一个参数指的是html中占位符的名字,第二个参数就是文件的位置
helper.addInline("p01",new FileSystemResource(new File("C:\\Users\\c'q\\Desktop\\QQ图片20211016182717.jpg")));
helper.addInline("p02",new FileSystemResource(new File("C:\\Users\\c'q\\Desktop\\微信截图_20211026093901.png")));
javaMailSender.send(mimeMessage);
}
6.也是用的最多的使用thymeleaf模板
6.1添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
6.2在springboot项目中在resources/templates下面创建一个html文件
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>hello 欢迎加入 xxx 大家庭,您的入职信息如下:</p>
<table border="1">
<tr>
<td>姓名</td>
<td th:text="${name}"></td>
</tr>
<tr>
<td>入职日期</td>
<td th:text="${date}"></td>
</tr>
<tr>
<td>薪水</td>
<td th:text="${salary}"></td>
</tr>
</table>
<div style="color: #ff1a0e">一起努力创造辉煌</div>
</body>
</html>
6.3编写测试代码
@Autowired
TemplateEngine templateEngine;
@Autowired
JavaMailSender javaMailSender;
@Test
void contextLoads() throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
//true代表邮件可以添加附件
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
//邮件标题
helper.setSubject("这是一个测试的邮件标题");
//寄邮件的邮箱
helper.setFrom("1xxxx325@qq.com");
//收邮件的邮箱
helper.setTo("chxxxxg000@qq.com");
helper.setSentDate(new Date());
//邮件正文
// 这里引入的是Template的Context
Context context = new Context();
// 设置模板中的变量
context.setVariable("name", "javaboy");
context.setVariable("date","2021.11.01");
context.setVariable("salary", "99999");
// 第一个参数为模板的名称
String process = templateEngine.process("MailTest.html", context);
// 第二个参数true表示这是一个html文本
helper.setText(process,true);
javaMailSender.send(mimeMessage);
}
6.4邮件详情
完结。。。