添加依赖依赖
<!--邮件发送需要的依赖-->
<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>
<!--web请求接口用到-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
修改配置文件
在application.yml
中配置发送邮件相关的参数,具体如下
spring:
mail:
host: smtp.qq.com
# 填入自己申请的邮箱信息
username:
password:
default-encoding: UTF-8
重要的参数就这些,其它的使用默认的即可,以下为解释:
host
: 邮箱服务器地址,这个根据自己使用的什么邮箱有区别,比如:smtp.163.com
: 163邮箱smtp.126.com
: 126邮箱smtp.qq.com
: qq邮箱
username
: 邮箱登录的用户名password
: 第三方登陆授权码(需要自己在邮箱中申请)default-encoding
: 编码方式
POP3/SMTP 服务
上面提到了授权码的概念,首先要明确一个概念就是授权码跟我们直接登陆邮箱的密码不是一样的,授权码可以理解为第三方客户端登陆邮箱的密码,要想获取授权码需要我们去自己所用邮箱的官网设置开启 POP3/SMTP
以及IMAP/SMTP
服务,我这里就以自己使用的qq
账号为例介绍打开该服务以及获取授权码的步骤,如图:
登陆qq邮箱,按照图示步骤进行操作,在选择了服务之后会弹窗展示授权码,这里的授权码就是上边配置文件中password
需要填写的值(只写IMAP/SMTP
的授权码就可以)。
发送不同格式的邮件
public class MailServiceImpl implements IMailService {
/**
* 发送邮件接口
*/
@Autowired
private JavaMailSender jms;
/**
* 发送模板邮件时解析模板
*/
@Autowired
private TemplateEngine templateEngine;
/**
* 读取配置文件中的邮件发送者账号
*/
@Value("${spring.mail.username}")
private String from;
/**
* 简单文本邮件
*
* @param toUser 邮件接收者
*/
@Override
public void simpleMil(String toUser) {
//初始化简单的邮件对象
SimpleMailMessage message = new SimpleMailMessage();
//邮件发送者
message.setFrom(from);
//邮件接收者
message.setTo(toUser);
//邮件标题
message.setSubject("文字格式邮件");
//邮件内容
message.setText("文字格式内容");
//发送邮件
jms.send(message);
}
/**
* html邮件
*/
@Override
public void htmlMail(String toUser) throws MessagingException {
MimeMessage message = jms.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(toUser);
helper.setSubject("html格式标题");
String content = "<p style='color:yellow;'>这是一封html格式的文件</p><h1>这是一封html格式的文件</h1>";
//true表示以html格式发送邮件
helper.setText(content, true);
jms.send(message);
}
/**
* 带附件邮件
*/
@Override
public void attachmentMail(String toUser) throws MessagingException {
MimeMessage message = jms.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(toUser);
helper.setSubject("带附件");
helper.setText("这是一封带附件的邮件");
//加载文件路径
FileSystemResource fs = new FileSystemResource(new File(this.getClass().getResource("/").getPath()
+ "\\自己菜与大佬菜的区别.jpg"));
//添加附件
helper.addAttachment("自己菜与大佬菜的区别.jpg", fs);
jms.send(message);
}
/**
* 带图片邮件
*/
@Override
public void imgMail(String toUser) throws MessagingException {
MimeMessage message = jms.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(toUser);
helper.setSubject("带图片邮件");
//设置资源的cid
String content = "<html><body>小菜鸡图片<img src='cid:img'/></body></html>";
helper.setText(content, true);
FileSystemResource fs = new FileSystemResource(new File(this.getClass().getResource("/").getPath()
+ "\\自己菜与大佬菜的区别.jpg"));
helper.addInline("img", fs);
jms.send(message);
}
/**
* 模板邮件
*/
@Override
public void templateMail(String toUser) throws MessagingException {
MimeMessage message = jms.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(toUser);
helper.setSubject("模板邮件");
Context context = new Context();
context.setVariable("username", "段誉");
//thymeleaf模板默认会从src/resources/templates目录下寻找文件,填入我们定义的模板名,不需要写后缀
String template = templateEngine.process("MailTemplate", context);
helper.setText(template, true);
jms.send(message);
}
}
模板邮件的模板
接下来在src/main/resources/templates
目录下新建MailTemplate.html
文件,内容如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>您好,<span th:text="${username}"></span>:这是来自测试的邮件模板!</h1>
</body>
</html>
测试结果不再展示,更改配置后可自行测试
demo地址
来源
作者:诺丨言
链接:https://juejin.im/post/5ca8578bf265da30893a052d
来源:掘金