Java使用JavaMail API實現(xiàn)原生郵箱發(fā)送功能的方法
前言
涵蓋技術(shù)內(nèi)容:Java后端、大數(shù)據(jù)、算法、分布式微服務(wù)、中間件、前端、運維等。
原生集成郵箱實現(xiàn)
引入pom.xml
郵件發(fā)送借助javax.mail工具類
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
前提配置
1、163、新浪郵箱不需要 SSL 加密,QQ 郵箱需要 SSL 加密,在下面實現(xiàn)中開啟了SSL加密。
2、若是想要發(fā)送郵件得需要先登陸到對應(yīng)的郵件服務(wù)器,那么必不可少的就是校驗碼,如何獲取校驗碼如下:
設(shè)置-開啟,根據(jù)如下開啟指示開啟即可獲取校驗碼:

功能實現(xiàn)
package com.dtstack.knowledge.ai.server.util;
import com.sun.mail.util.MailSSLSocketFactory;
import javax.mail.*;
import javax.mail.Message;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
/**
* @ClassName MailUtil
* @Author ChangLu
* @Date 2022/1/25 18:28
* @Description TODO
*/
public class MailUtil {
public static void main(String[] args) throws Exception {
sendQQMail("939974883@qq.com", "changlu@dtstack.com", "sdfdsfdsdfds");
}
private static SimpleDateFormat DATE_FORMAT_TOOL = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
/**
* 向指定qq發(fā)送郵件
* @param FROM 發(fā)送者qq
* @param to 接受者qq
* @param code 發(fā)送者qq的授權(quán)碼(需要去qq郵箱進(jìn)行授權(quán))
* @throws Exception
*/
public static void sendQQMail(String FROM, String TO, String code) throws Exception {
Properties props = new Properties();
// 開啟debug調(diào)試
props.setProperty("mail.debug", "true");
// 發(fā)送服務(wù)器需要身份驗證
props.setProperty("mail.smtp.auth", "true");
// 設(shè)置郵件服務(wù)器主機(jī)名
props.setProperty("mail.host", "smtp.qq.com");
// 發(fā)送郵件協(xié)議名稱
props.setProperty("mail.transport.protocol", "smtp");
// 針對 JDK 17 的 SSL 協(xié)議配置
props.setProperty("mail.smtp.ssl.protocols", "TLSv1.2");
//開啟SSL加密
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
props.put("mail.smtp.ssl.enable", "true");
props.put("mail.smtp.ssl.socketFactory", sf);
Session session = Session.getInstance(props);
//消息對象配置信息
Message msg = new MimeMessage(session);
//設(shè)置標(biāo)題名稱
msg.setSubject("測試");
StringBuilder builder = new StringBuilder();
builder.append("\n " + "<h1>歡迎你加入智蜂工作室!</h1>");
builder.append("\n時間 " + DATE_FORMAT_TOOL.format(new Date()));
//設(shè)置短信內(nèi)容(setContent可以設(shè)置發(fā)送內(nèi)容的類型格式)
msg.setContent(builder.toString(), "text/html;charset=UTF-8");
msg.setFrom(new InternetAddress(FROM));//發(fā)送人的郵箱地址
//進(jìn)行連接
Transport transport = session.getTransport();
transport.connect("smtp.qq.com", FROM, code);
transport.sendMessage(msg, new Address[] { new InternetAddress(TO) });//接收人的郵箱地址
transport.close();
}
}
效果:

問題解決
報錯:javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
解決方式:

補充配置項參數(shù):
// 針對 JDK 17 的 SSL 協(xié)議配置
props.setProperty("mail.smtp.ssl.protocols", "TLSv1.2");
到此這篇關(guān)于Java使用JavaMail API實現(xiàn)原生郵箱發(fā)送功能的方法的文章就介紹到這了,更多相關(guān)JavaMail API原生郵箱發(fā)送內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MyBatis?多表聯(lián)合查詢及優(yōu)化方法
大家都知道Hibernate 是全自動的數(shù)據(jù)庫持久層框架,它可以通過實體來映射數(shù)據(jù)庫,通過設(shè)置一對多、多對一、一對一、多對多的關(guān)聯(lián)來實現(xiàn)聯(lián)合查詢,接下來通過本文給大家介紹MyBatis?多表聯(lián)合查詢及優(yōu)化,需要的朋友可以參考下2022-08-08
SpringBoot獲取當(dāng)前運行環(huán)境三種方式小結(jié)
在使用SpringBoot過程中,我們只需要引入相關(guān)依賴,然后在main方法中調(diào)用SpringBootApplication.run(應(yīng)用程序啟動類.class)方法即可,那么SpringBoot是如何獲取當(dāng)前運行環(huán)境呢,接下來由小編給大家介紹一下SpringBoot獲取當(dāng)前運行環(huán)境三種方式,需要的朋友可以參考下2024-01-01
【IntelliJ IDEA】Maven構(gòu)建自己的第一個Java后臺的方法
本篇文章主要介紹了Maven構(gòu)建自己的第一個Java后臺的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-12-12
淺談Java list.remove( )方法需要注意的兩個坑
這篇文章主要介紹了淺談Java list.remove( )方法需要注意的兩個坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12
java字符串與字符數(shù)組之間的互轉(zhuǎn)方式
這篇文章主要介紹了java字符串與字符數(shù)組之間的互轉(zhuǎn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-05-05

