使用 hutool 发送邮件
1、导入依赖
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.3.4</version>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
2、编写配置文件
目录结构
新建文件 mail.setting
# 邮件服务器的SMTP地址
host = smtp.qq.com
# 邮件服务器的SMTP的端口
port = 465
# 发件人(必须正确,否则发送失败)
from = 239XXXX9@qq.com
# 用户名(注意:如果使用foxmail邮箱,此处user为qq号)
user = 239XXXX9
# 密码(拿到的授权码)
pass = caeXXXXjff
# 使用STARTTLS安全链接
startttlsEnable = 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
新建模板文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div class="info-top" style="padding: 15px 25px;
border-top-left-radius: 10px;
border-top-right-radius: 10px;
background: burlywood;
color: crimson;
line-height: 10px;">
<div style="font-size: 18px" ><b>{0}</b></div>
</div>
<div class="info-wrap" style="border-bottom-left-radius: 10px;
border-bottom-right-radius: 10px;
border:1px solid #ddd;
overflow: hidden;
padding: 15px 15px 20px;">
<div class="tips" style="padding:15px;">
<p style=" list-style: 160%; margin: 10px 0;"><h3>Hi</h3>以下信息请您仔细阅读:</p>
<p style=" list-style: 160%; margin: 10px 0;"> {1}</p>
</div>
</div>
</body>
</html>
代码实现
package com.domain.util;
import cn.hutool.extra.mail.MailAccount;
import cn.hutool.extra.mail.MailUtil;
import lombok.extern.slf4j.Slf4j;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.MessageFormat;
import java.util.ArrayList;
/**
* 邮件工具类
*
* @author z
* @date 2022-02-07 14:23
*/
@Slf4j
public class MailUtils {
/**
* 读取替换html文件模板中的信息
* @param title 正文标题
* @param contentText 正文信息
* @return 替换后文件模板中的信息
*/
public static String scopeTemplate(String title ,String contentText){
String filename="templates.html";
InputStream inputStream=ClassLoader.getSystemResourceAsStream(filename);
BufferedReader fileReader = new BufferedReader(new InputStreamReader(inputStream));
StringBuffer buffer = new StringBuffer();
String line="";
try{
while((line = fileReader.readLine())!= null){
buffer.append(line);
}
}catch(IOException e){
log.info("read template:{}",e);
}finally{
if(inputStream != null){
try{
inputStream.close();
}catch (Exception e){
log.info("{}",e);
}
}
if (fileReader != null){
try{
fileReader.close();
}catch(Exception e){
log.info("{}",e);
}
}
}
return MessageFormat.format(buffer.toString(),title,contentText);
}
/**
* 发送邮件
* @param to 发送邮件地址
* @param subject 发送邮件标题
* @param contentTitle 正文标题
* @param contentText 正文信息
* @return 发送是否成功
*/
public static boolean sendMail(String to,String subject,String contentTitle,String contentText){
String sendInfo=MailUtil.send(to,subject,scopeTemplate(contentTitle,contentText),true);
log.info(sendInfo);
return true;
}
/**
* 批量发送邮件
* @param tos 发送邮件地址列表
* @param subject 发送邮件标题
* @param contentTitle 正文标题
* @param contentText 正文信息
* @return 发送是否成功
*/
public static boolean sendMailList(ArrayList<String> tos, String subject, String contentTitle, String contentText){
String sendInfo=MailUtil.send(tos,subject,scopeTemplate(contentTitle,contentText),true);
log.info(sendInfo);
return true;
}
/**
* 自定义邮件服务器发送邮件
* @param account 邮件服务器信息
* @param to 发送邮件地址
* @param subject 发送邮件标题
* @param contentTitle 正文标题
* @param contentText 正文信息
* @return 发送是否成功
*/
public static boolean customSendMail(MailAccount account,String to, String subject, String contentTitle, String contentText){
String sendInfo=MailUtil.send(account,to,subject,scopeTemplate(contentTitle,contentText),true);
log.info(sendInfo);
return true;
}
/**
* 自定义邮件服务器批量发送邮件
* @param account 邮件服务器信息
* @param tos 发送邮件地址列表
* @param subject 发送邮件标题
* @param contentTitle 正文标题
* @param contentText 正文信息
* @return 发送是否成功
*/
public static boolean customSendMailList(MailAccount account, ArrayList<String> tos, String subject, String contentTitle, String contentText){
String sendInfo=MailUtil.send(account,tos,subject,scopeTemplate(contentTitle,contentText),true);
log.info(sendInfo);
return true;
}
}