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