官方文档 邮件工具-MailUtil (hutool.cn)https://hutool.cn/docs/#/extra/%E9%82%AE%E4%BB%B6%E5%B7%A5%E5%85%B7-MailUtil
引入hutool包
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.12</version>
</dependency>
引入发送邮件工具包
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
开启邮箱SMTP服务,获取授权码,授权码只显示一次,请保存后在关闭授权码窗口
发送邮件测试
MailAccount account = new MailAccount();
account.setHost("smtp.qq.com");//邮件服务器的SMTP地址,网易邮箱为smtp.163.com
account.setPort(587);//邮件服务器的SMTP端口,QQ邮箱为465或587,网易邮箱为25
account.setAuth(true);
account.setFrom("xxxxxxxxxx@qq.com");//设置发送人邮箱
account.setUser("xxxxxxxxxx");//发送人用户名
account.setPass("xxxxxxxxxxxxxxxx");//密码或者授权码
account.isSslEnable();//部分邮箱需要开启SSL
/**
使用SSL加密方式发送邮件 在使用QQ或Gmail邮箱时,需要强制开启SSL支持
**/
MailUtil.send(account, "xxxxxxxxxx@qq.com", //接收人邮箱
"测试主题", "TEST", false);
以下是封装后的代码(以qq邮箱为例)
import cn.hutool.extra.mail.MailAccount;
import cn.hutool.extra.mail.MailUtil;
import java.io.File;
public class SendMail {
private static final MailAccount account=new MailAccount();
/***
* receiverMail 接收人邮箱 ,也可以将String参数设置成集合如List<String>,
* List<String>中存储多个邮箱地址,可以实现批量发送邮件
* theme 发送邮件的标题 ,
* Text 发送邮件的文本内容,
* isHtml 当isHtml为ture且Text文本内容为html格式代码,邮件会以网页格式呈现
* files 发送附件,可以发送多个附件,files可以为空,默认没有附件发送
*/
public static void sendQQMail(String receiverMail, String theme,
String Text, Boolean isHtml,File... files){
account.setHost("smtp.qq.com");
account.setPort(587);
account.setAuth(true);
account.setFrom("xxxxxxxxxx@qq.com");
account.setUser("xxxxxxxxxx");
account.setPass("xxxxxxxxxxxxxxxx");
account.isSslEnable();
//使用SSL加密方式发送邮件 在使用QQ或Gmail邮箱时,需要强制开启SSL支持
MailUtil.send(account, receiverMail, theme, Text, isHtml,files);
}
}
测试
@Test
public void sendMail() {
SendMail.sendQQMail("xxxxxxxxxx@qq.com","测试主题","TEST",false);
}
接收成功
SpringBoot配置文件
# 邮件服务器的SMTP地址
host = smtp.qq.net
# 邮件服务器的SMTP端口
port = 465
# 发件人(必须正确,否则发送失败)
from = xxxxxxl@qq.com
# 用户名(注意:如果使用foxmail邮箱,此处user为qq号)
user = xxxxxx
# 密码(注意,某些邮箱需要为SMTP服务单独设置密码,详情查看相关帮助)
pass =xxxxxx
#使用 STARTTLS安全连接,STARTTLS是对纯文本通信协议的扩展。
starttlsEnable = true
# 使用SSL安全连接
sslEnable = true
# 指定实现javax.net.SocketFactory接口的类的名称,这个类将被用于创建SMTP的套接字
socketFactoryClass = javax.net.ssl.SSLSocketFactory
# 如果设置为true,未能创建一个套接字使用指定的套接字工厂类将导致使用java.net.Socket创建的套接字类, 默认值为true
socketFactoryFallback = true
# 指定的端口连接到在使用指定的套接字工厂。如果没有设置,将使用默认端口456
socketFactoryPort = 465
# SMTP超时时长,单位毫秒,缺省值不超时
timeout = 0
# Socket连接超时值,单位毫秒,缺省值不超时
connectionTimeout = 0
或者配置mail.setting
# 邮件服务器的SMTP地址,可选,默认为smtp.<发件人邮箱后缀>
host = smtp.qq.com
# 邮件服务器的SMTP端口,可选,默认25
port = 587
# 发件人(必须正确,否则发送失败)
from = xxxxxx@qq.com
# 用户名,默认为发件人邮箱前缀
user =xxxxxx
# 密码(注意,某些邮箱需要为SMTP服务单独设置授权码,详情查看相关帮助)
pass = *****
属性
- tos: 对方的邮箱地址,可以是单个,也可以是多个(Collection表示)
- subject:标题
- content:邮件正文,可以是文本,也可以是HTML内容
- isHtml: 是否为HTML,如果是,那参数3识别为HTML内容
- files: 可选:附件,可以为多个或没有,将File对象加在最后一个可变参数中即可