使用 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;
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM