准备工作
我们先要准备一个可以发送的邮箱,我这里以我的126邮箱为例,现在发送邮件的规则,要求你输入一种叫做授权码的东西,注意这个东西不是密码。
获取授权码步骤
对“POP3/SMTP服务”和“IMAP/SMTP服务”进行勾选
开启授权码,之后便能获得授权码了
源码实现
项目总体目录结构
pom.xml文件
<!--邮件依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!--thymeleaf用于模板邮件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
application.properties配置文件
# 邮件服务地址
spring.mail.host=smtp.126.com
spring.mail.username=honger1234t_t@126.com
#这里是授权码不是邮箱密码
spring.mail.password=java1234
spring.mail.default-encoding=utf-8
MailService.java
package com.honger.service.mail;
import java.io.File;
import javax.annotation.Resource;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
@Service
public class MailService {
private static final Logger log = LoggerFactory.getLogger(MailService.class);
@Value("${spring.mail.username}")
private String from;
@Resource
private JavaMailSender javaMailSender;
/**
* @Description: 简单文本邮件
* @author zt
* @date 2020年3月3日 上午12:03:35
*/
public void sendSimpleMail(String to, String subject, String content) {
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setTo(to);
simpleMailMessage.setSubject(subject);
simpleMailMessage.setText(content);
simpleMailMessage.setFrom(from);
javaMailSender.send(simpleMailMessage);
}
/**
* @Description: Html邮件
* @author zt
* @date 2020年3月3日 上午12:04:06
*/
public void sendHtmlMail(String to, String subject, String content) throws MessagingException {
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
messageHelper.setTo(to);
messageHelper.setSubject(subject);
messageHelper.setText(content, true);
messageHelper.setFrom(from);
javaMailSender.send(message);
}
/**
* @Description: 带附件的邮件
* @author zt
* @date 2020年3月3日 上午12:12:30
*/
public void sendAttachmentMail(String to, String subject, String content, String filePath)
throws MessagingException {
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
messageHelper.setFrom(from);
messageHelper.setTo(to);
messageHelper.setSubject(subject);
messageHelper.setText(content, true);
FileSystemResource fileSystemResource = new FileSystemResource(new File(filePath));
String fileName = fileSystemResource.getFilename();
messageHelper.addAttachment(fileName, fileSystemResource);
javaMailSender.send(message);
}
/**
* @Description: 发送图片邮件
* @author zt
* @date 2020年3月3日 上午12:32:56
*/
public void sendInlineMail(String to, String subject, String content, String imagePath, String imageId) {
log.info("发送静态邮件开始:{},{},{},{},{}", to, subject, content, imagePath, imageId);
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper messageHelper = null;
try {
messageHelper = new MimeMessageHelper(message, true);
messageHelper.setFrom(from);
messageHelper.setTo(to);
messageHelper.setSubject(subject);
messageHelper.setText(content, true);
FileSystemResource fileSystemResource = new FileSystemResource(new File(imagePath));
messageHelper.addInline(imageId, fileSystemResource);
javaMailSender.send(message);
log.info("发送静态邮件成功");
} catch (MessagingException e) {
log.error("发送静态邮件失败");
}
}
}
测试类 MailTest.java
package com.honger.sevice.mail;
import javax.annotation.Resource;
import javax.mail.MessagingException;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import com.honger.service.mail.MailService;
@SpringBootTest
@RunWith(SpringRunner.class)
public class MailTest {
@Resource
private MailService mailService;
@Resource
private TemplateEngine templateEngine;
@Test
public void sendSimpleMailTest() {
mailService.sendSimpleMail("[email protected]", "这是一封简单的文本邮件", "这是一封简单的文本邮件");
}
@Test
public void sendHtmlMailTest() throws MessagingException {
String content = "<html>\n" + "<body>\n" + "<h1>" + "这是一封HTML邮件" + "</h1>\n" + "</body>\n" + "</html>";
mailService.sendHtmlMail("[email protected]", "这是一封HTML邮件", content);
}
@Test
public void sendAttachmentMailTest() throws MessagingException {
String filePath = "C:\\Users\\18316\\Desktop\\年终工作总结-张庭.docx";
mailService.sendAttachmentMail("[email protected]", "这是一封带附件的邮件", "这是一封带附件的邮件", filePath);
}
@Test
public void sendInlineMailTest() throws MessagingException {
String imagePath = "G:\\qrcode1.jpg";
String imageId = "image1";
String content = "<html>\n" + "<body>\n" + "这是图片邮件" + "<img src=\'cid:" + imageId + "\'>" + "</body>\n"
+ "</html>";
mailService.sendInlineMail("[email protected]", "这是一封带有图片的邮件", content, imagePath, imageId);
}
@Test
public void sendEmailTemplate() throws MessagingException {
Context context = new Context();
context.setVariable("id", "测试");
String templateContext = templateEngine.process("EmailTemplate", context);
mailService.sendHtmlMail("[email protected]", "这是一封模板邮件", templateContext);
}
}
邮件模板HTML文件EmailTemplate.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>邮件模板</title>
</head>
<body>
你好,感谢您的注册,这是一封已注册邮件,请点击下面的链接完成注册,感谢您的支持。
<a href="#" th:href="@{https://blog.csdn.net/qq_38738510?id={id}(id=${id})}">激活账户</a>
</body>
</html>