Java Email郵件發(fā)送簡單實現(xiàn)介紹
一、郵件協(xié)議
MTA 和 MDA 這樣的服務(wù)器軟件通常是現(xiàn)成的,我們通常不會關(guān)心這些郵件服務(wù)器的內(nèi)部是如何運(yùn)行 的。更多的需求場景,是需要發(fā)送郵件。例如:促銷商品郵件、驗證碼郵件、消息通知郵件等。常見的 郵件協(xié)議有: POP3 、 SMTP 、 IMAP 。
1.POP3
POP3是Post Office Protocol 3的簡稱,即郵局協(xié)議的第3個版本,它規(guī)定怎樣將個人計算機(jī)連接到Internet的郵件 服務(wù)器和下載電子郵件的電子協(xié)議。它是因特網(wǎng)電子郵件的第一個離線協(xié)議標(biāo)準(zhǔn),POP3允許用戶從服務(wù)器上把 郵件存儲到本地主機(jī)(即自己的計算機(jī))上,同時刪除保存在郵件服務(wù)器上的郵件,而POP3服務(wù)器則是遵循 POP3協(xié)議的接收郵件服務(wù)器,用來接收電子郵件的。
2.SMTP
SMTP 的全稱是“Simple Mail Transfer Protocol”,即簡單郵件傳輸協(xié)議。它是一組用于從源地址到目的地址傳 輸郵件的規(guī)范,通過它來控制郵件的中轉(zhuǎn)方式。SMTP 協(xié)議屬于 TCP/IP 協(xié)議簇,它幫助每臺計算機(jī)在發(fā)送或中 轉(zhuǎn)信件時找到下一個目的地。SMTP 服務(wù)器就是遵循 SMTP 協(xié)議的發(fā)送郵件服務(wù)器。 SMTP 認(rèn)證,簡單地說就是要求必須在提供了賬戶名和密碼之后才可以登錄 SMTP 服務(wù)器,這就使得那些垃圾 郵件的散播者無可乘之機(jī)。 增加 SMTP 認(rèn)證的目的是為了使用戶避免受到垃圾郵件的侵?jǐn)_。
3.IMAP
IMAP全稱是Internet Mail Access Protocol,即交互式郵件存取協(xié)議,它是跟POP3類似郵件訪問標(biāo)準(zhǔn)協(xié)議之 一。不同的是,開啟了IMAP后,您在電子郵件客戶端收取的郵件仍然保留 在服務(wù)器上,同時在客戶端上的操作 都會反饋到服務(wù)器上,如:刪除郵件,標(biāo)記已讀等,服務(wù)器上的郵件也會做相應(yīng)的動作。所以無論從瀏覽器登 錄郵箱或者客戶端 軟件登錄郵箱,看到的郵件以及狀態(tài)都是一致的。
4.IMAP和POP3有什么區(qū)別
- POP3協(xié)議允許電子郵件客戶端下載服務(wù)器上的郵件,但是在客戶端的操作(如移動郵件、標(biāo)記 已讀等),不會反饋到服務(wù)器上,比如通過客戶端收取了郵箱中的3封郵件并移動到其他文件夾,郵 箱服務(wù)器上的這些郵件是沒有同時被移動的 。
- IMAP提供webmail 與電子郵件客戶端之間的雙向通信,客戶端的操作都會反饋到服務(wù)器上,對 郵件進(jìn)行的操作,服務(wù)器上的郵件也會做相應(yīng)的動作。 IMAP和POP3有什么區(qū)別?
二、發(fā)送郵件
發(fā)送郵件時,我們需要構(gòu)造一個 Message 對象,然后調(diào)用 Transport.send(Message) 即可完成發(fā)送:絕 大多數(shù)郵件服務(wù)器要求發(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");//標(biāo)題
//郵件內(nèi)容復(fù)合對象
Multipart multipart = new MimeMultipart();
//正文
BodyPart textPart = new MimeBodyPart();
//參數(shù)一:正文內(nèi)容
//參數(shù)二:內(nèi)容類型;字符編碼機(jī)
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);//添加附件
//設(shè)置郵件內(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 服務(wù)器;
- 打開調(diào)試模式可以看到詳細(xì)的 SMTP 交互信息;
- 某些郵件服務(wù)商需要開啟 SMTP ,并需要獨立的 SMTP 登錄密碼。
到此這篇關(guān)于Java Email郵件發(fā)送簡單實現(xiàn)介紹的文章就介紹到這了,更多相關(guān)Java Email內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解如何在SpringBoot中實現(xiàn)優(yōu)雅關(guān)閉
這篇文章主要介紹了如何在SpringBoot中實現(xiàn)優(yōu)雅關(guān)閉,SpringBoot應(yīng)用程序的關(guān)閉可以是崩潰,也可以是手動關(guān)閉的,Shutdown、Crash 和 Graceful 之間的區(qū)別在于,它控制決定了我們可以用這個事件做什么,本文中,一起研究下Spring Boot提供的開箱即用功能之一:優(yōu)雅關(guān)閉2024-09-09
SSM框架中entity mapper dao service controll
這篇文章主要介紹了SSM框架中entity mapper dao service controller層的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11
Spring?Security?登錄時添加圖形驗證碼實現(xiàn)實例
這篇文章主要為大家介紹了Spring?Security?登錄時添加圖形驗證碼實現(xiàn)實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11

