JavaMail郵件簡(jiǎn)介及API概述第一篇
現(xiàn)如今,電子郵件在我們的生活當(dāng)中扮演著越來(lái)越重要的角色,我們每個(gè)人幾乎都會(huì)與其打交道(至少時(shí)不時(shí)我們都會(huì)接收到莫名其妙的垃圾郵件),在工作中,使用郵件進(jìn)行交流溝通,可以使我們的工作有跡可循,也顯的較為正式,這是由我們?nèi)藶槭止げ僮鞯?,在生活中,在某網(wǎng)站注冊(cè)了一個(gè)賬戶(hù)之后,該網(wǎng)站就會(huì)自動(dòng)發(fā)送一封歡迎郵件并讓我們確認(rèn)是否注冊(cè),以防止惡意注冊(cè),當(dāng)然,這個(gè)就不可能像我們工作中手工方式來(lái)進(jìn)行操作了,Java的13種核心技術(shù)中的JavaMail為我們提供了API來(lái)對(duì)郵件進(jìn)行相關(guān)的操作。
一、郵件服務(wù)器
要在Internet上提供電子郵件功能,必須有專(zhuān)門(mén)的電子郵件服務(wù)器。Internet上架設(shè)了大量的電子郵件服務(wù)器,例如,sina.com、qq.com、163.com等網(wǎng)站提供了面向公眾免費(fèi)的電子郵件服務(wù)器,許多公司也提供了面向內(nèi)部員工的電子郵件服務(wù)器,這些電子郵件服務(wù)器彼此之間都可以發(fā)送和接收電子郵件。那郵件服務(wù)器的作用是什么呢,它可以幫我們把郵件發(fā)出去,也可以幫我們把郵件接收進(jìn)來(lái),還可以為我們提供取郵件的服務(wù),這個(gè)類(lèi)似于現(xiàn)實(shí)生活中的郵局,既可以接收郵件,也可以為我們?nèi)∴]件提供服務(wù),還可以幫我們發(fā)送郵件。下面的圖片形象的說(shuō)明了郵件服務(wù)器的功能
(1)接收用戶(hù)投遞的郵件;
(2)將用戶(hù)投遞進(jìn)來(lái)的郵件轉(zhuǎn)發(fā)給目標(biāo)郵件服務(wù)器;
(3)接收其他郵件服務(wù)器轉(zhuǎn)發(fā)來(lái)的郵件并把郵件存儲(chǔ)到其管理的用戶(hù)郵箱中;
(4)為前來(lái)讀取郵件的用戶(hù)提供讀取服務(wù)。
郵件服務(wù)器按通訊協(xié)議可以劃分為兩種類(lèi)型:SMTP服務(wù)器和POP3/IMAP服務(wù)器,上圖中的1、2、3的功能就是由SMTP服務(wù)器完成的,而4的功能則是由POP3服務(wù)器完成的。
二、電子郵箱
每個(gè)電子郵件服務(wù)器之上都可以開(kāi)設(shè)多個(gè)電子郵箱,電子郵箱也稱(chēng)之為E-mail地址,它類(lèi)似現(xiàn)實(shí)生活中的通訊地址,用戶(hù)可通過(guò)這個(gè)地址接收別人發(fā)來(lái)的電子郵件和向別人發(fā)送電子郵件。電子郵箱的獲得需要在郵件服務(wù)器上進(jìn)行申請(qǐng),確切地說(shuō),電子郵箱其實(shí)就是用戶(hù)在郵件服務(wù)器上申請(qǐng)的一個(gè)帳戶(hù)。郵件服務(wù)器把接收到的郵件保存到為某個(gè)帳戶(hù)所分配的郵箱空間中(所以我們需要定期清理我們的郵件,否則超過(guò)了分配的空間則無(wú)法接收到新的郵件),用戶(hù)通過(guò)其申請(qǐng)的用戶(hù)名和密碼登陸到郵件服務(wù)器上查收該地址已收到的電子郵件。
三、電子郵件的傳輸過(guò)程
電子郵件的傳輸過(guò)程可以用下圖來(lái)表示
上圖實(shí)線(xiàn)過(guò)程描述:
1、lisi@sina.com的郵件客戶(hù)端與sina的SMTP服務(wù)器建立網(wǎng)絡(luò)連接,并以lisi的用戶(hù)名和密碼進(jìn)行登錄后,使用SMTP協(xié)議把郵件發(fā)送給sina的SMTP服務(wù)器;
2、sina的SMTP服務(wù)器收到lisi@sina.com提交的地址郵件后,首先根據(jù)收件人的地址后綴判斷接收者的郵件地址是否屬于該SMTP服務(wù)器的管轄范圍,如果是就直接把郵件存儲(chǔ)到收件人的郵箱中,否則,sina的SMTP服務(wù)器向DNS服務(wù)器查詢(xún)收件人的郵件地址后綴(sohu.com)所表示的域名的MX記錄,從而得到sohu的SMTP服務(wù)器信息,然后與soho的SMTP服務(wù)器建立連接并采用SMTP協(xié)議把郵件發(fā)送給sohu的SMTP服務(wù)器;
3、soho的SMTP服務(wù)器收到sina的SMTP服務(wù)器發(fā)來(lái)的電子郵件后,也將根據(jù)收件人的地址判斷該郵件是否屬于該SMTP服務(wù)器的管轄范圍,如果是的話(huà)就直接把郵件存儲(chǔ)到收件人的郵箱中,否則,sohu的SMTP服務(wù)器可能繼續(xù)轉(zhuǎn)發(fā)這封郵件;
4、wangwu@sohu.com賬號(hào)通過(guò)客戶(hù)端與soho的POP3/IMAP服務(wù)器建立網(wǎng)絡(luò)連接,并成功登錄后,然后通過(guò)POP3/IMAP協(xié)議查看wangwu@sohu.com郵箱中是否有新郵件,如果有,則使用POP3或IMAP協(xié)議讀取郵箱中的郵件。
虛線(xiàn)過(guò)程與實(shí)線(xiàn)過(guò)程類(lèi)似,不再重復(fù)。
JavaMail API是Sun公司為方便Java開(kāi)發(fā)人員在應(yīng)用程序中實(shí)線(xiàn)郵件發(fā)送和接收功能而通過(guò)的一套標(biāo)準(zhǔn)開(kāi)發(fā)包,它支持一些常用的郵件協(xié)議,如SMTP、POP3、IMAP和MIME等。要用這套API,當(dāng)然需要先下載相關(guān)jar包,最新版本1.5.6,下載地址:https://java.net/projects/javamail/pages/Home。
JavaMail API按其功能劃分通??煞譃槿缦氯箢?lèi):
1、創(chuàng)建和解析郵件內(nèi)容的API :Message類(lèi)是創(chuàng)建和解析郵件的核心API,它的實(shí)例對(duì)象代表一封電子郵件;
2、發(fā)送郵件的API:Transport類(lèi)是發(fā)送郵件的核心API類(lèi),它的實(shí)例對(duì)象代表實(shí)現(xiàn)了某個(gè)郵件發(fā)送協(xié)議的郵件發(fā)送對(duì)象,例如SMTP協(xié)議;
3、接收郵件的API:Store類(lèi)是接收郵件的核心API類(lèi),它的實(shí)例對(duì)象代表實(shí)現(xiàn)了某個(gè)郵件接收協(xié)議的郵件接收對(duì)象,例如POP3協(xié)議。
Session類(lèi):
Session類(lèi)用于定義整個(gè)應(yīng)用程序所需的環(huán)境信息,以及收集客戶(hù)端與郵件服務(wù)器建立網(wǎng)絡(luò)連接的會(huì)話(huà)信息,如郵件服務(wù)器的主機(jī)名、端口號(hào)、采用的郵件發(fā)送和接收協(xié)議等。Session對(duì)象根據(jù)這些信息構(gòu)建用于郵件收發(fā)的Transport和Store對(duì)象,以及為客戶(hù)端創(chuàng)建Message對(duì)象時(shí)提供信息支持。
以上4個(gè)類(lèi)的關(guān)系如下所示:
以上內(nèi)容大部分摘抄自《Java郵件開(kāi)發(fā)詳解》一書(shū)。下一篇JavaMail入門(mén)第二篇 創(chuàng)建郵件將介紹如何使用JavaMail提供的API創(chuàng)建郵件。
- java中javamail發(fā)送帶附件的郵件實(shí)現(xiàn)方法
- Java基于JavaMail實(shí)現(xiàn)向QQ郵箱發(fā)送郵件
- java中javamail收發(fā)郵件實(shí)現(xiàn)方法
- Java程序中使用JavaMail發(fā)送帶圖片和附件的郵件
- JavaMail實(shí)現(xiàn)發(fā)送超文本(html)格式郵件的方法
- struts2集成javamail發(fā)郵件示例詳解
- JavaWeb中使用JavaMail實(shí)現(xiàn)發(fā)送郵件功能實(shí)例詳解
- javamail 發(fā)送郵件的實(shí)例代碼分享
- JavaMail實(shí)現(xiàn)郵件發(fā)送的方法
- Java使用JavaMail API發(fā)送和接收郵件的代碼示例
相關(guān)文章
java實(shí)現(xiàn)科學(xué)計(jì)算器的全過(guò)程與代碼
最近編寫(xiě)了一個(gè)功能較全面的科學(xué)計(jì)算器,該計(jì)算器不僅能進(jìn)行加、減、乘、除等混合運(yùn)算,而且能計(jì)算sin、cos、tan、log等函數(shù)的值,還要具有清零、退格、求倒數(shù)、求相反數(shù)等功能,這篇文章主要給大家介紹了關(guān)于java實(shí)現(xiàn)科學(xué)計(jì)算器的相關(guān)資料,需要的朋友可以參考下2022-06-06淺談Java基礎(chǔ)知識(shí)之BigDecimal
我們又來(lái)回顧Java基礎(chǔ)知識(shí)啦,今天講的是BigDecimal的基本使用以及異常處理,下文中有非常詳細(xì)的代碼示例以及注釋哦,需要的朋友可以參考下2021-05-05Spring.Net控制反轉(zhuǎn)IoC入門(mén)使用
這篇文章主要為大家詳細(xì)介紹了Spring.Net控制反轉(zhuǎn)IoC入門(mén)使用的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06java項(xiàng)目中使用 Lombok遇到的問(wèn)題小結(jié)
這篇文章主要介紹了java項(xiàng)目中使用 Lombok遇到的問(wèn)題小結(jié),需要的朋友可以參考下2018-07-07一文探索Apache HttpClient如何設(shè)定超時(shí)時(shí)間
Apache HttpClient是一個(gè)流行的Java庫(kù),用于發(fā)送HTTP請(qǐng)求,這篇文章主要為大家介紹了Apache HttpClient如何設(shè)定超時(shí)時(shí)間,感興趣的小伙伴可以學(xué)習(xí)一下2023-10-10SpringBoot MockMvc單元測(cè)試的示例代碼
這篇文章主要介紹了SpringBoot MockMvc單元測(cè)試的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11