日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java web邮件收发组件

發(fā)布時間:2023/12/10 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java web邮件收发组件 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在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ā)送郵件的主機,如:

Properties props = new Properties (); props.put("mail.smtp.host","xxxx@sima.com");//xxxx@sima.com就是字符串mail.smtp.host的屬性。

(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 對象:

Session sendMailSession;  sendMailSession = Session.getDefaultInstance(props);//創(chuàng)建了session會話 sendMailSession.setDebug(true);//設(shè)置debug模式調(diào)試發(fā)送信息,在控制臺中或日志中有日志信息顯示

(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:

Message message; message = new MimeMessage(sendMailSession);//創(chuàng)建一封郵件對象 message.setSubject("title");//寫信,設(shè)置主題title message.setContent("content", "text/html;charset=utf-8");//寫信,設(shè)置正文內(nèi)容content,響應(yīng)方式和字符編碼

(4)Javax.mail.Address、Javax.mail.internet.InternetAddress
一旦您創(chuàng)建了Session 和 Message,并將內(nèi)容填入消息后,就可以用 Address 確定信件地址了。和 Message 一樣,Address 也是個抽象類。您用的是 Javax.mail.internet.InternetAddress 類。代碼如下:

Address address = new Address []{new InternetAddress("xxxx@sima.com"),new InternetAddress("xxxx@qq.com")}//創(chuàng)建address數(shù)組,同時向多地址發(fā)送

(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() 方法,代碼如下:

Transport transport; transport = sendMailSession.getTransport();鏈接郵件服務(wù)器的認證信息 transport.connect("mailHost", "admin", "pass");//設(shè)置參數(shù),mailHost表示郵件發(fā)送服務(wù)器,admin、pass表示使用該服務(wù)器的用戶名和密碼 transport.send(message);//發(fā)送消息 transport.sendMessage(message, address);//設(shè)置收件人地址,并且發(fā)送郵件

(6)Javax.mail.Store
Store類實現(xiàn)特定郵件協(xié)議上的讀、寫、監(jiān)視、查找等操作。通過Store類的方法可以訪問。

Store store = session.getSorte(pop3);// 獲取Store對象 store.connect(popserver,username,password);// POP服務(wù)器的登陸認證

(7)Javax.mail.Folder
在連接到Store后,一個Folder對象即目錄對象將通過Store的getFolder()方法被返回,我們可從這個Folder中讀取郵件信息:

Folder folder = store.getFolder("INBOX");// 獲得用戶的郵件帳戶 folder.open(Folder.READ_WRITE); // 設(shè)置對郵件帳戶的訪問權(quán)限 Message[] messages = folder.getMessages();// 得到郵箱帳戶中的所有郵件

●郵件發(fā)送實例
如下圖所示,在郵件發(fā)送界面可以填寫收件人郵箱、郵件的主題和內(nèi)容,填好之后點擊發(fā)送(點擊重置可清除所有內(nèi)容),收件人登陸郵箱后可查看到收到的郵件,如下圖所示。


開發(fā)前需要引入mail.jar包
●郵件發(fā)送實例完整代碼:
sendMail.jsp頁面:

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <html> <head><title>郵件發(fā)送</title> </head> <body>當前郵箱:lwb1084514417@sina.com<form action="mailDeal.jsp" method="post"> 收信人郵箱:<input type="text" name="to">主題:<input type="text" name="title"><br>內(nèi)容:<br><textarea rows="10" cols="80" name="content"></textarea><br><input type="submit" value="發(fā)送"><input type="reset" value="重置"></form> </body> </html>

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)容。具體的操作將在代碼注釋中給出。

●郵件接受實例完整代碼:

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <html> <head><title>郵件接收</title> </head> <body>當前郵箱:lwb1084514417@sina.com<br>所有郵件:<br><hr><% String pop3Server = "pop.sina.com";String protocol = "pop3";String username = "lwb1084514417@sina.com";String password = "lwb940804"; // QQ郵箱的SMTP的授權(quán)碼,什么是授權(quán)碼,它又是如何設(shè)置? Properties props = new Properties();props.setProperty("mail.transport.protocol", protocol); // 使用的協(xié)議(JavaMail規(guī)范要求)props.setProperty("mail.smtp.host", pop3Server); // 發(fā)件人的郵箱的 SMTP服務(wù)器地址Session sess = Session.getDefaultInstance(props);// 獲取連接sess.setDebug(false);Store store = sess.getStore(protocol);// 獲取Store對象store.connect(pop3Server, username, password); // POP3服務(wù)器的登陸認證// 通過POP3協(xié)議獲得Store對象調(diào)用這個方法時,郵件夾名稱只能指定為"INBOX"Folder folder = store.getFolder("INBOX");// 獲得用戶的郵件帳戶folder.open(Folder.READ_WRITE); // 設(shè)置對郵件帳戶的訪問權(quán)限Message[] messages = folder.getMessages();// 得到郵箱帳戶中的所有郵件 for (Message message : messages) {String subject = message.getSubject();// 獲得郵件主題String from = ((InternetAddress)message.getFrom()[0]).getAddress();// 獲得發(fā)送者地址String content = message.getContent().toString();// 獲得郵件內(nèi)容%>郵件主題:<%=subject %><br>發(fā)件人地址:<%=from %><br>內(nèi)容:<%=content %><hr><% } folder.close(false);// 關(guān)閉郵件夾對象store.close(); // 關(guān)閉連接對象%> </body>

總結(jié)

以上是生活随笔為你收集整理的java web邮件收发组件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。