Java Email郵件發(fā)送簡單實現(xiàn)介紹
一、郵件協(xié)議
MTA 和 MDA 這樣的服務器軟件通常是現(xiàn)成的,我們通常不會關心這些郵件服務器的內(nèi)部是如何運行 的。更多的需求場景,是需要發(fā)送郵件。例如:促銷商品郵件、驗證碼郵件、消息通知郵件等。常見的 郵件協(xié)議有: POP3 、 SMTP 、 IMAP 。
1.POP3
POP3是Post Office Protocol 3的簡稱,即郵局協(xié)議的第3個版本,它規(guī)定怎樣將個人計算機連接到Internet的郵件 服務器和下載電子郵件的電子協(xié)議。它是因特網(wǎng)電子郵件的第一個離線協(xié)議標準,POP3允許用戶從服務器上把 郵件存儲到本地主機(即自己的計算機)上,同時刪除保存在郵件服務器上的郵件,而POP3服務器則是遵循 POP3協(xié)議的接收郵件服務器,用來接收電子郵件的。
2.SMTP
SMTP 的全稱是“Simple Mail Transfer Protocol”,即簡單郵件傳輸協(xié)議。它是一組用于從源地址到目的地址傳 輸郵件的規(guī)范,通過它來控制郵件的中轉(zhuǎn)方式。SMTP 協(xié)議屬于 TCP/IP 協(xié)議簇,它幫助每臺計算機在發(fā)送或中 轉(zhuǎn)信件時找到下一個目的地。SMTP 服務器就是遵循 SMTP 協(xié)議的發(fā)送郵件服務器。 SMTP 認證,簡單地說就是要求必須在提供了賬戶名和密碼之后才可以登錄 SMTP 服務器,這就使得那些垃圾 郵件的散播者無可乘之機。 增加 SMTP 認證的目的是為了使用戶避免受到垃圾郵件的侵擾。
3.IMAP
IMAP全稱是Internet Mail Access Protocol,即交互式郵件存取協(xié)議,它是跟POP3類似郵件訪問標準協(xié)議之 一。不同的是,開啟了IMAP后,您在電子郵件客戶端收取的郵件仍然保留 在服務器上,同時在客戶端上的操作 都會反饋到服務器上,如:刪除郵件,標記已讀等,服務器上的郵件也會做相應的動作。所以無論從瀏覽器登 錄郵箱或者客戶端 軟件登錄郵箱,看到的郵件以及狀態(tài)都是一致的。
4.IMAP和POP3有什么區(qū)別
- POP3協(xié)議允許電子郵件客戶端下載服務器上的郵件,但是在客戶端的操作(如移動郵件、標記 已讀等),不會反饋到服務器上,比如通過客戶端收取了郵箱中的3封郵件并移動到其他文件夾,郵 箱服務器上的這些郵件是沒有同時被移動的 。
- IMAP提供webmail 與電子郵件客戶端之間的雙向通信,客戶端的操作都會反饋到服務器上,對 郵件進行的操作,服務器上的郵件也會做相應的動作。 IMAP和POP3有什么區(qū)別?
二、發(fā)送郵件
發(fā)送郵件時,我們需要構造一個 Message 對象,然后調(diào)用 Transport.send(Message) 即可完成發(fā)送:絕 大多數(shù)郵件服務器要求發(fā)送方地址和登錄用戶名必須一致,否則發(fā)送將失敗。
package com.ljl.email;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.util.ByteArrayDataSource;
import javax.activation.DataHandler;
import javax.mail.BodyPart;
import javax.mail.Message.RecipientType;
public class Demo03 {
public static void main(String[] args) {
try {
//創(chuàng)建Session會話
Session session = JavaMailUtils.createSession();
//創(chuàng)建郵件對象(Message抽象類的子類對象)
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress("olaiolaio@126.com"));
msg.setRecipient(RecipientType.TO ,new InternetAddress("2272789133@qq.com"));
msg.setSubject("這是一份測試郵件","utf-8");//標題
//郵件內(nèi)容復合對象
Multipart multipart = new MimeMultipart();
//正文
BodyPart textPart = new MimeBodyPart();
//參數(shù)一:正文內(nèi)容
//參數(shù)二:內(nèi)容類型;字符編碼機
textPart.setContent("輸了<b>你</b>贏了世界又如何","text/html;charset=utf-8");
//附件
BodyPart imagePart = new MimeBodyPart();
imagePart.setFileName("lin.jpg");
imagePart.setDataHandler(new DataHandler(new ByteArrayDataSource(Files.readAllBytes(Paths.get("D:\\k\\image\\ljj.jpg")), "application/octet-stream")));
//添加至郵件內(nèi)容
multipart.addBodyPart(textPart);//添加正文
multipart.addBodyPart(imagePart);//添加附件
//設置郵件內(nèi)容
msg.setContent(multipart);
//發(fā)送
Transport.send(msg);
} catch (MessagingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
三、總結(jié)
- 使用 JavaMail API 發(fā)送郵件本質(zhì)上是一個 MUA 軟件通過 SMTP 協(xié)議發(fā)送郵件 至 MTA 服務器;
- 打開調(diào)試模式可以看到詳細的 SMTP 交互信息;
- 某些郵件服務商需要開啟 SMTP ,并需要獨立的 SMTP 登錄密碼。
到此這篇關于Java Email郵件發(fā)送簡單實現(xiàn)介紹的文章就介紹到這了,更多相關Java Email內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java中遇到的For?input?string問題解決辦法
這篇文章主要給大家介紹了關于Java中遇到的For?input?string問題的解決辦法,如果出現(xiàn)這樣的異常報錯,是指的數(shù)據(jù)轉(zhuǎn)換時出錯,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2023-11-11
SpringBoot+Redis執(zhí)行l(wèi)ua腳本的5種方式總結(jié)
Lua是一種快速、輕量級的腳本語言,廣泛應用于各種領域,包括數(shù)據(jù)庫,Redis作為一個內(nèi)嵌Lua解釋器的NoSQL數(shù)據(jù)庫,允許通過Lua腳本在服務器端執(zhí)行一些復雜的操作,本文給大家介紹了使用SpringBoot Redis執(zhí)行l(wèi)ua腳本的五種方式,需要的朋友可以參考下2023-11-11
SpringBoot環(huán)境下junit單元測試速度優(yōu)化方式
這篇文章主要介紹了SpringBoot環(huán)境下junit單元測試速度優(yōu)化方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09
Java 實戰(zhàn)項目之疫情人員流動管理系統(tǒng)詳解
讀萬卷書不如行萬里路,只學書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java實現(xiàn)一個疫情人員流動管理系統(tǒng),大家可以在過程中查缺補漏,提升水平2021-11-11
SSH框架網(wǎng)上商城項目第30戰(zhàn)之項目總結(jié)(附源碼下載地址)
這篇文章主要介紹了SSH框架網(wǎng)上商城項目第30戰(zhàn)之項目總結(jié),并附源碼下載地址,感興趣的小伙伴們可以參考一下2016-06-06
HashMap實現(xiàn)保存兩個key相同的數(shù)據(jù)
這篇文章主要介紹了HashMap實現(xiàn)保存兩個key相同的數(shù)據(jù)操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06
SpringBoot整合MybatisPlus的簡單教程實現(xiàn)(簡單整合)
這篇文章主要介紹了SpringBoot整合MybatisPlus的簡單教程實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-05-05

