springoot发送邮件(一)
一、开启邮箱的SMTP服务——以新浪邮箱为例

SMTP是一种提供可靠且有效的电子邮件传输的协议。SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知。
二、配置Spring Email
- 引入入Spring Email依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
- 邮箱参数配置
在application.yml
中添加以下配置
spring:
mail:
host: smtp.sina.com
port: 465
username: xxx@sina.com
password: xxx #此处填写授权密码
protocol: smtps #协议
properties:
mail:
smtp:
ssl:
enadle: true
- 编写邮件发送工具类
发送邮件的功能主要由JavaMailSender类实现
MimeMessageHelper类用于添加邮件内容
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
@Component
public class MailClient {
private Logger logger = LoggerFactory.getLogger(MailClient.class);
@Autowired
JavaMailSender mailSender;
//发件人
@Value("${spring.mail.username}")
private String from;
/**
* 发送邮件
*
* @param to 收件人
* @param subject 主题
* @param content 内容
*/
public void sendMail(String to, String subject, String content) {
//构建message模板
MimeMessage message = mailSender.createMimeMessage();
//添加内容
MimeMessageHelper helper = new MimeMessageHelper(message);
try {
//设置发件人
helper.setFrom(from);
//设置收件人
helper.setTo(to);
//设置主题
helper.setSubject(subject);
//设置内容,true支持html
helper.setText(content, true);
//发送
mailSender.send(helper.getMimeMessage());
} catch (MessagingException e) {
logger.error("发送邮件失败:" + e.getMessage());
}
}
}
- 测试
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class MailTest {
@Autowired
private MailClient mailClient;
@Test
public void test1() {
mailClient.sendMail("xxx@163.com", "test", "这是测试内容...");
}
}

三、使用Thymeleaf发送html邮件
- 编写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: blue" th:text="${username}"></span>
</p>
</body>
</html>
- 编写测试类
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
@SpringBootTest
public class MailTest {
@Autowired
private MailClient mailClient;
@Autowired
private TemplateEngine templateEngine;
@Test
public void testHtmlMail(){
Context context = new Context();
context.setVariable("username","Lisa");
String content = templateEngine.process("mail/demo", context);
mailClient.sendMail("xxx@163.com","html",content);
}
}
