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

功能實(shí)現(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();
// 開(kāi)啟debug調(diào)試
props.setProperty("mail.debug", "true");
// 發(fā)送服務(wù)器需要身份驗(yàn)證
props.setProperty("mail.smtp.auth", "true");
// 設(shè)置郵件服務(wù)器主機(jī)名
props.setProperty("mail.host", "smtp.qq.com");
// 發(fā)送郵件協(xié)議名稱(chēng)
props.setProperty("mail.transport.protocol", "smtp");
// 針對(duì) JDK 17 的 SSL 協(xié)議配置
props.setProperty("mail.smtp.ssl.protocols", "TLSv1.2");
//開(kāi)啟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);
//消息對(duì)象配置信息
Message msg = new MimeMessage(session);
//設(shè)置標(biāo)題名稱(chēng)
msg.setSubject("測(cè)試");
StringBuilder builder = new StringBuilder();
builder.append("\n " + "<h1>歡迎你加入智蜂工作室!</h1>");
builder.append("\n時(shí)間 " + DATE_FORMAT_TOOL.format(new Date()));
//設(shè)置短信內(nèi)容(setContent可以設(shè)置發(fā)送內(nèi)容的類(lè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();
}
}
效果:

問(wèn)題解決
報(bào)錯(cuò):javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
解決方式:

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

