一、说明:
项目中,我们经常会用到发送邮件的功能,那邮件的功能有很多:
网站的注册验证
网站营销
安全的最后一道防线
提醒、监控、告警
触发机制
二、邮件传输原理
邮件传输协议:SMTP协议和POP3协议
内容不断发展:IMAP协议和Mime协议
三、邮件发送流程
四、邮件的几种类型
基础配置
文本邮件
HTML邮件
附件邮件
图片邮件
模板邮件
五、前置操作
申请邮件客户端授权码:以网易邮箱为例
我这个是已经开启过,如未开启点击开启,生成一串授权码,将授权码复制下来
六、代码实践
添加依赖,spring boot会自动引入版本
<!--邮件发送 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!--模板邮件发送 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2、填写application.yml授权文件
#邮箱配置
spring:
mail:
#地址 我的是网易邮箱所以是@163.com
host: smtp.163.com
username: nuanxin0321@163.com
#客户端授权码
password: WPYAIRJDUYHBQHPZ
default-encoding: utf-8
3、邮件发送代码
@Component
public class MailUtils {
private final Logger logger = LoggerFactory.getLogger(MailUtils.class);
@Value("${spring.mail.username}")
private String fromUser;
@Resource
private JavaMailSender mailSender;
/*
* @Author @csn
* @Description //发送文本邮件
* @Date 15:58 2023/2/9
* @param sendUsr subject content
* @return
**/
public void sendSimpleMail(String sendUsr, String subject, String content) {
//参数说明 sendUsr接收用户 subject 发送主题 content 发送正文
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setTo(sendUsr);
simpleMailMessage.setSubject(subject);
simpleMailMessage.setText(content);
simpleMailMessage.setFrom(fromUser);
mailSender.send(simpleMailMessage);
}
/*
* @Author @csn
* @Description 发送Html邮件
* @Date 16:40 2023/2/9
* @param * @param null
* @return {@link null}
**/
public void sendHtmlMail(String sendUsr, String subject, String content){
try {
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setTo(sendUsr);
helper.setSubject(subject);
helper.setText(content,true);
helper.setFrom(fromUser);
mailSender.send(mimeMessage);
} catch (Exception e) {
logger.error("邮件发送失败{}",e);
}
}
/*
* @Author @csn
* @Description 发送附件邮件
* @Date 16:40 2023/2/9
* @param * @param null
* @return {@link null}
**/
public void sendAttachmentMail(String sendUsr, String subject, String content,String filePath){
try {
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setTo(sendUsr);
helper.setSubject(subject);
helper.setText(content,true);
helper.setFrom(fromUser);
FileSystemResource file = new FileSystemResource(new File(filePath));
String fileName = file.getFilename();
helper.addAttachment(fileName,file);
mailSender.send(mimeMessage);
} catch (MessagingException e) {
logger.error("邮件发送失败{}",e);
}
}
/*
* @Author @csn
* @Description 发送图片邮件
* @Date 16:40 2023/2/9
* @param * @param null
* @return {@link null}
**/
public void sendPictureMail(String sendUsr, String subject, String content,String picPath,String picId){
try {
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setTo(sendUsr);
helper.setSubject(subject);
helper.setText(content,true);
helper.setFrom(fromUser);
FileSystemResource file = new FileSystemResource(new File(picPath));
String fileName = file.getFilename();
helper.addInline(picId,file);
mailSender.send(mimeMessage);
} catch (MessagingException e) {
logger.error("邮件发送失败{}",e);
}
}
}
4、邮件发送测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class MailTest {
@Resource
private MailUtils mailUtils;
@Resource
TemplateEngine templateEngine;
@Test
public void sayHelloTest() {
mailUtils.sendSimpleMail("nuanxan0321@163.com","测试文本邮件","测试文本邮件发送");
}
@Test
public void sendHtmlTest() {
String content = "<html>\n" +
"<body>\n" +
"<h3>hello,这是一封html邮件!</h3>\n" +
"</body>\n" +
"</html>";
mailUtils.sendHtmlMail("nuanxin0321@163.com","测试html邮件",content);
}
@Test
public void sendAttachmentsTest() {
String fileName = "C:\\Users\\scn\\Documents\\csn\\装修\\新建文本文档.txt";
mailUtils.sendAttachmentMail("nuanxin0321@163.com","测试附件邮件","这是附件文件",fileName);
}
@Test
public void sendPictureTest(){
String fileName = "C:\\Users\\scn\\Documents\\csn\\生活记录\\关大爷.png";
String picId = "csn0001";
String content = "<html><body> 这是有图片的邮件:<img src=\'cid:"+picId+
"\'> </img></body></html>";
mailUtils.sendPictureMail("969857738@qq.com","测试有图片的邮件",content,fileName,picId);
}
@Test
public void sendTemplateMailTest() {
Context context = new Context();
//以下参数为模板配置里的参数,可见步骤5
context.setVariable("id","006");
String emailTemplate = templateEngine.process("emailTemplate", context);
mailUtils.sendHtmlMail("nuanxin0321@163.com","测试模板邮件",emailTemplate);
}
}
5、模板邮件模板配置
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>邮件模板</title>
</head>
<body>
您好,感谢您的注册,这是一封验证邮件,请点击下面的链接完成注册,感谢您的支持!
<a href="#" th:href="@{https://i.csdn.net/#/user-center/profile?spm=${id}(id=${id})}">激活账号</a>
</body>
</html>