java web邮件收发组件
在Web開發(fā)中,需要用到郵件收發(fā)組件的例子很多,例如開發(fā)一個購物網(wǎng)站時,若訂單付款成功就需要給用戶發(fā)送訂單相關(guān)的郵件,在求職類網(wǎng)站中,應(yīng)聘者也會收到面試通知的郵件等等,甚至有些公司也會開發(fā)單獨的郵件收發(fā)系統(tǒng)。開發(fā)前,首先需要弄清楚郵件相關(guān)的協(xié)議,包括SMTP、POP3和IMAP(后面將介紹),并且需要登陸相關(guān)的郵件服務(wù)器開啟這些協(xié)議服務(wù)(以新浪郵箱為例),如下圖所示,在新浪郵箱中開啟SMTP、POP3和IMAP服務(wù)。在Java郵件收發(fā)的開發(fā)中,常用到的就是JavaMail組件(后面將介紹)。
●SMTP、POP3和IMAP
(1)SMTP
SMTP 的全稱是“Simple Mail Transfer Protocol”,即簡單郵件傳輸協(xié)議。它是一組用于從源地址到目的地址傳輸郵件的規(guī)范,通過它來控制郵件的中轉(zhuǎn)方式。IMAP全稱是Internet Mail Access Protocol,即交互式郵件存取協(xié)議,它是跟POP3類似郵件訪問標準協(xié)議之一。不同的是,開啟了IMAP后,您在電子郵件客戶端收取的郵件仍然保留在服務(wù)器上,同時在客戶端上的操作都會反饋到服務(wù)器上,如:刪除郵件,標記已讀等,服務(wù)器上的郵件也會做相應(yīng)的動作。所以無論從瀏覽器登錄郵箱或者客戶端軟件登錄郵箱,看到的郵件以及狀態(tài)都是一致的。
(2)POP3
POP3是Post Office Protocol 3的簡稱,即郵局協(xié)議的第3個版本,它規(guī)定怎樣將個人計算機連接到Internet的郵件服務(wù)器和下載電子郵件的電子協(xié)議。它是因特網(wǎng)電子郵件的第一個離線協(xié)議標準,POP3允許用戶從服務(wù)器上把郵件存儲到本地主機(即自己的計算機)上,同時刪除保存在郵件服務(wù)器上的郵件,而POP3服務(wù)器則是遵循POP3協(xié)議的接收郵件服務(wù)器,用來接收電子郵件的。
(3)IMAP
MAP全稱是Internet Mail Access Protocol,即交互式郵件存取協(xié)議,它是跟POP3類似郵件訪問標準協(xié)議之一。不同的是,開啟了IMAP后,您在電子郵件客戶端收取的郵件仍然保留在服務(wù)器上,同時在客戶端上的操作都會反饋到服務(wù)器上,如:刪除郵件,標記已讀等,服務(wù)器上的郵件也會做相應(yīng)的動作。所以無論從瀏覽器登錄郵箱或者客戶端軟件登錄郵箱,看到的郵件以及狀態(tài)都是一致的。
●JavaMail簡介
JavaMail,顧名思義,提供給開發(fā)者處理電子郵件相關(guān)的編程接口。它是Sun發(fā)布的用來處理email的API。它可以方便地執(zhí)行一些常用的郵件傳輸。我們可以基于JavaMail開發(fā)出類似于Microsoft Outlook的應(yīng)用程序。JavaMail包中用于處理電子郵件的核心類是:Session,Message,Address,Authenticator,Store,Transport, Folder等。Session定義了一個基本的郵件會話,它需要從Properties中讀取類似于郵件服務(wù)器,用戶名和密碼等信息,JavaMail的郵件傳輸過程如下圖所示。
●JavaMail常用類
(1)Java.util.Properties
JavaMail需要Properties來創(chuàng)建一個session對象。它將尋找字符串mail.smtp.host,屬性值就是發(fā)送郵件的主機,如:
(2)Javax.mail.Session
Session類定義了一個基本郵件會話session,是Java Mail API最高層入口類。所有其它類都是經(jīng)由這個session才得以生效。Session對象用Java.util.Properties對象獲取信息,如郵件服務(wù)器、用戶名、密碼及整個應(yīng)用程序中共享的其它信息。這個Session類代表JavaMail中的一個郵件session。每一個基于JavaMail的應(yīng)用程序至少有一個session但是可以有任意多的session。Session對象需要知道用來處理郵件的SMTP服務(wù)器。為了做到這一點,你可以參照下面的例子用Properties 來創(chuàng)建一個Session 對象:
(3)Javax.mail.Message、Javax.mail.MimeMessage
一旦獲得Session對象,就可以繼續(xù)創(chuàng)建要發(fā)送的消息。這由Message類來完成。因為Message是個抽象類,必需用一個子類,多數(shù)情況下為 Javax.mail.internet.MimeMessage。MimeMessage是個能理解MIME類型和頭的電子郵件消息。Message對象將存儲我們實際發(fā)送的電子郵件信息,Message對象被作為一個MimeMessage對象來創(chuàng)建并且需要知道應(yīng)當選擇哪一個JavaMail session:
(4)Javax.mail.Address、Javax.mail.internet.InternetAddress
一旦您創(chuàng)建了Session 和 Message,并將內(nèi)容填入消息后,就可以用 Address 確定信件地址了。和 Message 一樣,Address 也是個抽象類。您用的是 Javax.mail.internet.InternetAddress 類。代碼如下:
(5)Javax.mail.Transport
消息發(fā)送的最后一部分是使用Transport類。這個類用協(xié)議指定的語言發(fā)送消息。JavaMail Session對象的getTransport方法來初始化Transport。傳過去的字符串申明了對象所要使用的協(xié)議,通常是SNTP。注意JavaMail并不是絕對支持每一個協(xié)議,目前支持IMAP、 SMTP和 POP3。它是抽象類,它的工作方式與Session有些類似。僅調(diào)用靜態(tài)send() 方法,代碼如下:
(6)Javax.mail.Store
Store類實現(xiàn)特定郵件協(xié)議上的讀、寫、監(jiān)視、查找等操作。通過Store類的方法可以訪問。
(7)Javax.mail.Folder
在連接到Store后,一個Folder對象即目錄對象將通過Store的getFolder()方法被返回,我們可從這個Folder中讀取郵件信息:
●郵件發(fā)送實例
如下圖所示,在郵件發(fā)送界面可以填寫收件人郵箱、郵件的主題和內(nèi)容,填好之后點擊發(fā)送(點擊重置可清除所有內(nèi)容),收件人登陸郵箱后可查看到收到的郵件,如下圖所示。
開發(fā)前需要引入mail.jar包
●郵件發(fā)送實例完整代碼:
sendMail.jsp頁面:
mailDeal.jsp頁面:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <html> <head><title>文件上傳</title> </head> <body><% String mailHost="smtp.sina.com";//郵件服務(wù)器String admin="lwb1084514417";//郵箱服務(wù)器用戶名String pass="********";//郵箱服務(wù)器密碼,不可見String fromUser="lwb1084514417@sina.com";//發(fā)件人郵箱request.setCharacterEncoding("utf-8");String toUser = request.getParameter("to").trim();String title = request.getParameter("title").trim();String content = request.getParameter("content").trim();//創(chuàng)建郵件發(fā)送相關(guān)對象Properties props=new Properties();Session sess=null;Message message=null;Transport transport=null;try{props.setProperty("mail.transport.protocol", "smtp");sess=Session.getDefaultInstance(props);//創(chuàng)建了session會話sess.setDebug(true);//設(shè)置debug模式調(diào)試發(fā)送信息,在控制臺中或日志中有日志信息顯示message=new MimeMessage(sess);//創(chuàng)建一封郵件對象message.setSubject(title);//寫信message.setContent(content, "text/html;charset=utf-8");//正文內(nèi)容message.setFrom(new InternetAddress(fromUser));//發(fā)件人地址transport=sess.getTransport();//鏈接郵件服務(wù)器的認證信息transport.connect(mailHost, admin, pass);//設(shè)置參數(shù)transport.sendMessage(message, new Address []{new InternetAddress(toUser)});//設(shè)置收件人地址,并且發(fā)送郵件}catch (Exception e) {throw new RuntimeException(e);}finally{try {transport.close();//關(guān)閉傳輸} catch (MessagingException e) {throw new RuntimeException(e);}} %> </body> </html>●郵件接收實例
如下圖所示,可以看到郵箱賬戶lwb1084514417@sina.com的所有郵件信息,包括郵件主題、發(fā)件人郵箱地址和郵件內(nèi)容。具體的操作將在代碼注釋中給出。
●郵件接受實例完整代碼:
總結(jié)
以上是生活随笔為你收集整理的java web邮件收发组件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 开发艾特功能,Andro
- 下一篇: POJ-1384 Piggy-Bank