Spring Boot如何实现邮件发送
准备工作
这里就以 QQ 邮箱来进行演示,使用 QQ 邮箱首先要申请开通 POP3/SMTP 服务或者 IMAP/SMTP 服务,这里介绍下 QQ 邮箱如何开通 POP3/SMTP 服务或者 IMAP/SMTL服务的步骤
1.登陆QQ邮箱,先点击顶部的设置按钮和账户按钮,如下图所示:
2.在账户的最下方找到 POP3/SMTP 服务,单击后面的 开启 按钮,如下图所示:
然后它会提示你发送一条短信,你按照它的要求发一条短信,操作成功后,你会获得一个授权码,授权码保存下来等会要用到
1.发送简单邮件
1.首先搭建SpringBoot环境,添加如下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2.在 application.properties 文件中添加邮件的基本配置,代码如下:
# 配置 smtp 服务器地址
spring.mail.host=smtp.qq.com
# smtp 服务器的端口
spring.mail.port=587
# 配置邮箱用户名
spring.mail.username=你自己的邮箱
# 配置申请到的授权码
spring.mail.password=这里填写刚才短信申请到的授权码
# 配置邮件编码
spring.mail.default-encoding=UTF-8
# 配饰 SSL 加密工厂
spring.mail.properties.mail.smtp.socketFactoryClass=javax.net.ssl.SSLSocketFactory
# 表示开启 DEBUG 模式
spring.mail.properties.mail.debug=true
3.测试
@SpringBootTest
class SendqqemailApplicationTests {
@Autowired
JavaMailSender javaMailSender;
/**
* 发送简单邮件
*/
@Test
public void sendSimpleMail() {
SimpleMailMessage msg = new SimpleMailMessage(); //构建一个邮件对象
msg.setSubject("这是一封测试邮件"); // 设置邮件主题
msg.setFrom("bai211425401@qq.com"); // 设置邮箱发送者
msg.setTo("1712900841@qq.com"); // 设置邮件接收者,可以有多个接收者
msg.setSentDate(new Date()); // 设置邮件发送日期
msg.setText("这是测试邮件的正文"); // 设置邮件的正文
javaMailSender.send(msg);
}
}
这里面要注意,当你设置邮件发送者时 ”这个邮件发送者“必须是你application.properties 中配置的邮件账户
执行此方法,即可看到邮件发送成功,如下图所示:
2.发送带附件的邮件
附件可以是图片,也可以是普通文件,都可以支持发送
/**
* 发送带附件的邮件
* @throws MessagingException
*/
@Test
public void sendAttachFileMail() throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
helper.setSubject("这是一封测试邮件");
helper.setFrom("bai211425401@qq.com");
helper.setTo("1712900841@qq.com");
helper.setSentDate(new Date());
helper.setText("这是测试邮件的正文");
helper.addAttachment("fileimg.png",new File("C:\\Users\\bai\\Pictures\\Camera Roll\\img\\1.png"));
javaMailSender.send(mimeMessage);
}
这里使用 MimeMessageHelper 简化了邮件配置,他的构造方法的第二个参数 true 表示构造一个 multipart message 类型的邮件,multiaprt message 类型的邮件包含多个正文、附件以及内嵌资源,邮件的表现形式更加丰富,最后通过 addAttachment 方法添加附件,结果如下图:
3.发送带图片资源的邮件
图片资源和附件的区别就在于 图片资源是放在邮件正文中的,就是一打开邮件就能看到图片
/**
* 发送带图片资源的邮件
* @throws MessagingException
*/
@Test
public void sendImgResMail() throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
helper.setSubject("这是一封测试邮件");
helper.setFrom("bai211425401@qq.com");
helper.setTo("1712900841@qq.com");
helper.setSentDate(new Date());
helper.setText("<p>hello 大家好,我是一封测试邮件,我包含了两张图片,分别如下</p><p>第一张图片:</p><img src='cid:p01'/><p>第二张图片:</p><img src='cid:p02'/>",true);
helper.addInline("p01",new FileSystemResource(new File("C:\\Users\\bai\\Pictures\\Camera Roll\\img\\1.png")));
helper.addInline("p02",new FileSystemResource(new File("C:\\Users\\bai\\Pictures\\Camera Roll\\img\\2.png")));
javaMailSender.send(mimeMessage);
}
效果如下图所示:
4.使用 Freemaker 作为邮件模板
1.首先引入 Freemaker 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
2.创建 Freemaker 模板
在 resources/templates 目录下创建一个 mail.ftl 作为邮件发送模板:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Freemaker邮件模板</title>
</head>
<body>
<p>hello 欢迎加入 Spring Boot 大家族,您的入职信息如下:</p>
<table border="1">
<tr>
<td>姓名</td>
<td>${username}</td>
</tr>
<tr>
<td>工号</td>
<td>${num}</td>
</tr>
<tr>
<td>薪水</td>
<td>${salary}</td>
</tr>
</table>
<div style="color: red;">一起努力创造辉煌</div>
</body>
</html>
3.进行测试
/**
* 使用 Freemaker 作为邮件模板
* @throws MessagingException
*/
@Test
public void sendFreemakerMail() throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
helper.setSubject("这是一封测试邮件");
helper.setFrom("bai211425401@qq.com");
helper.setTo("1712900841@qq.com");
helper.setSentDate(new Date());
// 构建 Freemaker 的基本配置
Configuration configuration = new Configuration(Configuration.VERSION_2_3_0);
// 配置模板位置
ClassLoader loader = SendqqemailApplication.class.getClassLoader();
configuration.setClassLoaderForTemplateLoading(loader,"templates");
// 加载模板
try {
Template template = configuration.getTemplate("mail.ftl");
Employee entity = new Employee("张三",1001,6500.0);
StringWriter out = new StringWriter();
// 模板渲染,渲染的结果将被保存到 out 中,将 out 中的 html 字符串发送即可
template.process(entity,out);
helper.setText(out.toString(),true);
javaMailSender.send(mimeMessage);
}catch (Exception e){
e.printStackTrace();
}
}
效果图如下:
5.使用 Thymeleaf 作为邮件模板
1.首先引入 Thymeleaf 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2.创建 Thymeleaf 邮件模板
在 resources/templates 目录下创建一个 mail.html 作为邮件发送模板:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Thymeleaf邮件模板</title>
</head>
<body>
<p>hello 欢迎加入 Spring Boot 大家族,您的入职信息如下:</p>
<table border="1">
<tr>
<td>姓名</td>
<td th:text="${username}"></td>
</tr>
<tr>
<td>工号</td>
<td th:text="${num}"></td>
</tr>
<tr>
<td>薪水</td>
<td th:text="${salary}"></td>
</tr>
</table>
<div style="color: red;">一起努力创造辉煌</div>
</body>
</html>
3.进行测试
/**
* 使用 Thymeleaf 作为邮件模板
* @throws MessagingException
*/
@Test
public void sendThymeleafMail() throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
helper.setSubject("这是一封测试邮件");
helper.setFrom("bai211425401@qq.com");
helper.setTo("1712900841@qq.com");
helper.setSentDate(new Date());
Context context = new Context();
context.setVariable("username","李四");
context.setVariable("num","1002");
context.setVariable("salary",8000);
String process = templateEngine.process("mail.html",context);
helper.setText(process,true);
javaMailSender.send(mimeMessage);
}
效果图如下:
结语
看完对你有帮助的话点个赞再走吧!
有问题欢迎留言讨论!
来源:CSDN
作者:红颜祸水nvn
链接:https://blog.csdn.net/qq_43647359/article/details/104638599