Title

使用 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;">&nbsp;&nbsp;{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;
    }
}
posted @ 2022-02-07 16:18  快乐小洋人  阅读(1694)  评论(0编辑  收藏  举报