文章目录
- 1. 准备
- 2. 发送简单邮件
- 3. 发送复杂邮件 Spring Email
- 4. 通过Thymeleaf 发送 HTML 邮件
• 邮件发送需要引入spring-boot-starter-mail
• Spring Boot 自动配置MailSenderAutoConfiguration
• 定义MailProperties内容,配置在application.yml中
• 自动装配JavaMailSender
• 测试邮件发送
邮件发送过程(Spring Email):
(1)首先要把远程端的邮箱(寄件人邮箱)的POP3/SMTP协议开启,配置好邮箱信息;
(2)我们需要封装一个发送邮件的工具类,这样我们以后都可以用;
(3)明白发件人是谁(这是固定的);收件人(不固定),邮件主题和内容(不固定);
(4)比如,我们建一个工具类MailClient,把收件人数据(固定)注入到IOC容器让Spring管理,以后都可以用;这个工具类用到一个接口 JavaMailSender
,这个接口有两个方法:MimeMessage createMimeMessage()和send,MimeMessage 用来构建信息,send用来发送构建的信息。
(5)如何构建信息:因为这个接口只是创建了一个MimeMessage模板,但是信息还不起作用,只是空模板,需要spring提供一个MimeMessageHelper帮助类,构建MimeMessage信息。
(6)当帮助类构建好信息后,就可以通过帮助类构建的信息去设置收件人,寄件人,邮件主题、内容、图片附件等,最后由send去发送信息。整个过程大概就是这样。
1. 准备
1.导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>2.1.5.RELEASE</version>
</dependency>
2.配置邮箱相关参数:
注意密码不是邮箱密码,是授权验证码
# 邮箱配置
# MailProperties
#域名
spring.mail.host=smtp.sina.com
#端口号:一般邮箱的端口号都是465
spring.mail.port=465
#寄件人邮箱
spring.mail.username=jh752336828@sina.com
#这个密码是授权验证码:在设置里开启POP3/SMTP协议
spring.mail.password=22c496f8da84e365
spring.mail.protocol=smtps
spring.mail.properties.mail.smtp.ssl.enable=true
在下面开启第一个服务发送短信获取授权码:
2. 发送简单邮件
这里用到了JavaMailSender的实现类 JavaMailSenderImpl
发送简单文本邮件类:SimpleMailMessage
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootTaskApplicationTests {
@Autowired
JavaMailSenderImpl mailSender;
@org.junit.Test
//简单的消息邮件发送
public void contextLoads() {
SimpleMailMessage message = new SimpleMailMessage();
//邮件标题
message.setSubject("通知-今晚开会");
//邮件内容
message.setText("今晚7:30开会");
//给谁发邮件
message.setTo("18751887307@163.com");
message.setFrom("624097754@qq.com");
mailSender.send(message);
}
3. 发送复杂邮件 Spring Email
这个可以发送HTML格式的
@Test
public void test02() throws Exception{
//1、创建一个复杂的消息邮件
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
//邮件设置
helper.setSubject("通知-今晚开会");
helper.setText("<b style='color:red'>今天 7:30 开会</b>",true);
helper.setTo("18751887307@163.com");
helper.setFrom("624097754@qq.com");
//上传文件
helper.addAttachment("1.jpg",new File("C:\\Users\\hh\\Desktop\\1.jpg"));
mailSender.send(mimeMessage);
}
(2) 看个变化版的,熟悉邮件发送流程
看下这个JavaMailSender的源码只有两个方法:
public interface JavaMailSender extends MailSender {
MimeMessage createMimeMessage();
MimeMessage createMimeMessage(InputStream var1) throws MailException;
void send(MimeMessage var1) throws MailException;
void send(MimeMessage... var1) throws MailException;
void send(MimeMessagePreparator var1) throws MailException;
void send(MimeMessagePreparator... var1) throws MailException;
}
spring提供的帮助类MimeMessageHelper来创建MimeMessage实例
public MimeMessageHelper(MimeMessage mimeMessage) {
this(mimeMessage, (String)null);
}
编写邮件发送客户端发送邮件:(封装一个邮件工具类MailClient)
这个解释看下看下!!!!
@Component
public class MailClient {
private static final Logger logger = LoggerFactory.getLogger(MailClient.class);
@Autowired//JavaMailSender类组件注入到IOC容器
private JavaMailSender mailSender;
@Value("${spring.mail.username}")//把固定的发件人数据注入到IOC容器,让Spring管理
private String from;
public void sendMail(String to, String subject, String content) {
try {
//JavaMailSender类第一个方法:createMimeMessage()方法
// 创建了一个MimeMessage模板,但是信息还不起作用,只是空模板
MimeMessage message = mailSender.createMimeMessage();
//引入spring提供的MimeMessageHelper帮助类,构建MimeMessage信息
MimeMessageHelper helper = new MimeMessageHelper(message);
//寄件人
helper.setFrom(from);
//收件人
helper.setTo(to);
//主题
helper.setSubject(subject);
//加了true,允许邮件内容是一个HTML(MimeMessageHelper将html字符串转换成文本)文本
//不加true,就是普通的文本
helper.setText(content, true);
/**JavaMailSender类第二个方法:send方法,发送经spring提供的帮助类 MimeMessageHelper
* 创建的MimeMessage信息*/
mailSender.send(helper.getMimeMessage());
} catch (MessagingException e) {
logger.error("发送邮件失败:" + e.getMessage());
}
}
}
4. 通过Thymeleaf 发送 HTML 邮件
通过Thymeleaf 发送 HTML 邮件 :
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>邮件示例</title>
</head>
<body>
<p>欢迎你, <span style="color:red;" th:text="${username}"></span>!</p>
</body>
</html>
发送邮件:
通过模板引擎Thymeleaf发送:
- 记住:这里是测试类需要主动注入模板引擎才能调用,这里注入Thymeleaf的一个核心类TemplateEngine到容器中由spring管理;
- 而在Controller层里,直接返回模板引擎的路径,SpringMVC的核心组件:DispatcherServlet自动帮我们去调用模板。
测试类:
@RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration(classes = CommunityApplication.class)
public class MailTests {
@Autowired//注入工具类(封装好了)
private MailClient mailClient;
//使用Spring注入核心组件
@Autowired//注入模板引擎
private TemplateEngine templateEngine;
//使用JavaMailSender直接发送邮件
@Test
public void testTextMail() {
mailClient.sendMail("752336828@qq.com", "TEST", "Welcome.");
}
//使用Thymeleaf模板引擎发送邮件
@Test
public void testHtmlMail() {
Context context = new Context();
//定义模板数据,传入参数,username与demo.html中${username}匹配
context.setVariable("username", "sunday");
//定义获取thymeleaf的模板路径,以及模板数据
String content = templateEngine.process("/mail/demo", context);
mailClient.sendMail("752336828@qq.com", "HTML", content);
}
}