隻需三步!教你如何從Java應用程序發送電子郵件!

本教程將幫助您掌握使用本地Java庫通過SMTP通過Java應用程序發送電子郵件的過程。盡管它很簡單,但Jakarta Mail(以前稱為JavaMail)使您可以使用SMTP,POP3或IMAP協議發送和接收HTML電子郵件,包括圖像和附件。

從設置到生成郵件,再通過Gmail SMTP發送郵件,我們將進行整個過程。

雅加達郵件設置

如果您在2019年7月之前開始使用Java,那麼Jakarta Mail名稱聽起來可能有點陌生。但是從那時起,Java軟件已經成為Jakarta品牌的一部分。

要安裝郵件包,應將jakarta.mail.jar文件添加到CLASSPATH環境中。如果使用Java EE或Jakarta EE,則此文件已包含在軟件包中。否則,您可以從Jakarta Mail API官方頁面下載它。

另外,您可以使用Maven依賴項來實現它,如下所示:

<依賴項>

<依賴性>

<groupId> com.sun.mail </ groupId>

<artifactId> javax.mail </ artifactId>

<version> 1.6.2 </ version>

</ dependency>

</ dependencies>

如何使用Gmail配置電子郵件發送

您的Java應用程序可以與任何可用的SMTP服務器集成以發送電子郵件。在這裡,我們將演示如何配置Gmail(常用選項之一)。

您應該做的唯一技巧就是允許您的Gmail帳戶訪問。最簡單的方法是在此處啟用“允許安全性較低的應用程序” 選項。推薦的安全選項是使用oAuth2身份驗證。但是,這是一種更高級的方法,需要其他配置。首先,您需要從Google Developers Console獲取訪問令牌。有關詳細說明和說明,請參閱Google文檔。

然後,要通過Jakarta Mail訪問Gmail服務器,您需要滿足以下參數:

導入java.util。*;

導入javax.mail。*;

導入javax.mail.internet。*;

導入javax.activation。*;

在本文的後面,我們將介紹訪問Gmail SMTP的簡單方法。

要繼續,我們需要導入相關的類並添加屬性,尤其是:

§ SendEmail公共類,用於指定電子郵件頭

§ javax.mail.PasswordAuthentication類,用於正確的身份驗證

§ javax.mail.Transport用於發送消息

§ javax.mail.internet.MimeMessage

§ SMTP設置(主機,端口,用戶名和密碼),它們定義為props.put

§ message.setText用於簡單的純文本消息

這是完整的代碼示例:

包com.example.smtp;

導入java.util.Properties;

導入javax.mail.Message;

導入javax.mail.MessagingException;

導入javax.mail.PasswordAuthentication;

導入javax.mail.Session;

導入javax.mail.Transport;

導入javax.mail.internet.InternetAddress;

導入javax.mail.internet.MimeMessage;

公共類SendEmail {

公共靜態void main(String [] args){

// 添加收件人

字符串=“ test@example.com”;

//添加發件人

來自=“ myusername@gmail.com”的字符串;

final String用戶名=“ myusername@gmail.com”; //您的Gmail用戶名

最終的字符串密碼=“ mypassword”; //您的Gmail密碼

字符串主機=“ smtp.gmail.com”;

屬性props = new Properties();

props.put(“ mail.smtp.auth”,“ true”);

props.put(“ mail.smtp.starttls.enable”,“ true”);

props.put(“ mail.smtp.host”,host);

props.put(“ mail.smtp.port”,“ 587”);

//獲取會話對象

會話會話= Session.getInstance(props,

新的javax.mail.Authenticator(){

受保護的PasswordAuthentication getPasswordAuthentication(){

返回新的PasswordAuthentication(用戶名,密碼);

}

});

嘗試{

//創建一個默認的MimeMessage對象

消息消息=新的MimeMessage(會話);

message.setFrom(new InternetAddress(from));

message.setRecipients(Message.RecipientType.TO,

InternetAddress.parse(to));

//設置主題

message.setSubject(“ Hi JAXenter”);

//放入您的消息內容

message.setText(“嗨,我們隻是在這裡嘗試JavaMail”);

// 發信息

Transport.send(message);

System.out.println(“已成功發送消息。...”);

} catch(MessagingException e){

拋出新的RuntimeException(e);

}

}

}

帶有圖片和附件的HTML電子郵件

在大多數情況下,電子郵件通知包含格式,文件附件或圖像。為此,您必須添加HTML內容。在Jakarta Mail中,您應該使用SendHTMLEmail類MimeMessage.setContent,並指出text / html類型。最好在MimeMultipart(“ alternative”)對象中同時包含HTML和純文本。

將圖像嵌入到電子郵件中的最簡單方法(例如,公司徽標)是將其上傳到可靠的外部服務器,並在HTML代碼中引用它,如下所示:

包com.example.smtp;包com.example.smtp;導入java.util.Properties;

導入javax.mail.Message;導入javax.mail.MessagingException;

導入javax.mail.PasswordAuthentication;導入javax.mail.Session;

導入javax.mail.Transport;導入javax.mail.internet.InternetAddress;

導入javax.mail.internet.MimeMessage;

公共類SendHTMLEmail {

公共靜態void main(String [] args){

字符串為=“ johndoe@gmail.com”;

字符串來自=“ yourmail@example.com”;

final String用戶名=“ yourlogin”;

final String password =“您的密碼”;

字符串主機=“ smtp.example.com”;

屬性props = new Properties();

props.put(“ mail.smtp.auth”,“ true”);

props.put(“ mail.smtp.starttls.enable”,“ true”);

props.put(“ mail.smtp.host”,host);

props.put(“ mail.smtp.port”,“ 2525”);

//獲取會話對象

會話會話= Session.getInstance(props,

新的javax.mail.Authenticator(){

受保護的PasswordAuthentication getPasswordAuthentication(){

返回新的PasswordAuthentication(用戶名,密碼);

}

});

嘗試{

//創建一個默認的MimeMessage對象

消息消息=新的MimeMessage(會話);

message.setFrom(new InternetAddress(from));

message.setRecipients(Message.RecipientType.TO,

InternetAddress.parse(to));

message.setSubject(“帶有圖片和附件的HTML消息”);

//將HTML內容放在此處,並引用托管圖片

message.setContent(

“ <p> <img src =” http://yourserver.com/yourlogo.png“ alt =” img“ /> </ p> +

<p>嘿,您喜歡我們的徽標嗎?</ p>”,

“文本/ html”);

// 發信息

Transport.send(message);

System.out.println(“已成功發送消息。...”);

} catch(MessagingException e){

e.printStackTrace(); 拋出新的RuntimeException(e);

}

}

}

另一種方法是使用CID附件。這有點復雜,因為您應該創建MIME多部分/相關消息,然後引用HTML正文中的圖像。如果圖像不是存儲在圖像文件中,而是存儲在內存中的字節數組中,則也可以使用此方法。

Multipart multipart =新的MimeMultipart(“ related”);

MimeBodyPart htmlPart =新的MimeBodyPart();

//將圖片引用到HTML正文<img src =“ cid:some-image-cid” alt =“ img” />

htmlPart.setText(messageBody,“ utf-8”,“ html”);

multipart.addBodyPart(htmlPart);

MimeBodyPart imgPart =新的MimeBodyPart();

//用於存儲在文件中的圖像

imgPart.attachFile(imageFile);

//對於存儲在內存中的字節數組中的圖像

// imgPart.setDataHandler(new DataHandler(

// new ByteArrayDataSource(bytes,“ image / whatever”)));

imgPart.setContentID(“ <some-image-cid”>“);

multipart.addBodyPart(imgPart);

message.setContent(multipart);

最後,讓我們在郵件中附加一個文件。不管使用哪種文件類型,都可以通過如下方式將attachFile方法放入MimeBodyPart中來完成:

公共靜態無效setAttachment(消息消息,字符串文件名)拋出MessagingException {

//創建多部分消息

Multipart multipart = new MimeMultipart();

BodyPart messageBodyPart =新的MimeBodyPart();

//指定您的文件

DataSource源=新的FileDataSource(filename);

messageBodyPart.setDataHandler(new DataHandler(source));

messageBodyPart.setFileName(filename);

//添加文件部分

multipart.addBodyPart(messageBodyPart);

message.setContent(multipart);

最後,開發這麼多年我也總結瞭一套學習Java的資料與面試題,如果你在技術上面想提升自己的話,可以關註我,私信發送領取資料或者在評論區留下自己的聯系方式,有時間記得幫我點下轉發讓跟多的人看到哦。

3188acc77aac7f48a8154e760329b376

发表回复

相关推荐

半導體物理——波矢與能帶

一、波矢在學習半導體物理和固體物理的過程中,我始終在疑惑一個問題,在這兩個科目中頻繁出現的波矢空間到底是什麼,當時老...

· 20分钟前

【筆記】托馬斯·阿奎那

*歡迎指出錯誤!(1)法律和正義托馬斯在信仰與理性的關系方面以及法律方面有一些獨特的觀點。1.共相問題共相問題的本質是信...

· 21分钟前

慧為智能:智能終端ODM制造商,佈局5G、AI等領域順應行業趨勢

(報告出品方/作者:開源證券,諸海濱,趙昊)1、公司情況:深耕智能終端產品,2021年營收上漲39%1.1、發展歷程:成立於2011...

· 51分钟前

刚刚拿到人力资源管理师证书,个人真实备考经历分享(踩雷避坑指南,3000字经验分享建议收藏!)

大家在考取各类证书之前是否都会先了解相关信息呢?报考条件、报名时间等等

· 51分钟前

最近相位分析:冥王刑火星——隐秘角落里的暗流

溪云初起日沉阁 山雨欲来风满楼 本月初火星已经和冥王星逐渐运行到90°,一个相刑的位置。并且这个相位要持续到10月底。火 ...

· 54分钟前