【正文】
you want to read message? +[YES to read/QUIT to end])。if (YES.equals(line)) {message[i].writeTo()。 } }設(shè)置與message相關(guān)的Flags是刪除郵件的常用方法。在Flags類的內(nèi)部類Flag中預(yù)定義了一些標(biāo)志:但需要在使用時注意的:標(biāo)志存在并非意味著這個標(biāo)志被所有的郵件服務(wù)器所支持。所以要確定哪些標(biāo)志是被支持的——通過訪問一個已經(jīng)打開的Folder對象的getPermanetFlags()方法,它將返回當(dāng)前被支持的Flags類對象。但是首先要采用READ_WRITE的方式打開Folder:()。(true)。另外,介紹一種檢查某個標(biāo)志是否被設(shè)置的方法:( flag)方法,其中參數(shù)為被檢查的標(biāo)志。在此取代了直接使用郵件服務(wù)器主機名、用戶名、密碼這三個字符串作為連接到POP3 Store的方式,使用存儲了郵件服務(wù)器主機名信息的屬性文件,并在獲得Session時傳入自定義的Authenticator實例:// Setup propertiesProperties props = ()。// Setup authentication, get sessionAuthenticator auth = new PopupAuthenticator()。// Get the storeStore store = (pop3)。PopupAuthenticator類繼承了抽象類Authenticator,并且通過重載Authenticator類的getPasswordAuthentication()方法返回PasswordAuthentication類對象。import .*。public class PopupAuthenticator extends Authenticator {public PasswordAuthentication getPasswordAuthentication(String param) {String username, password。StringTokenizer st = new StringTokenizer(param, ,)。password = ()。return new PasswordAuthentication(username, password)。而reply()方法中的boolean參數(shù)表示是否將郵件回復(fù)給發(fā)送者(參數(shù)值為false),或是回復(fù)給所有人(參數(shù)值為true)。MimeMessage reply = (MimeMessage)(false)。(Thanks)。 轉(zhuǎn)發(fā)郵件轉(zhuǎn)發(fā)郵件的過程不如前面的回復(fù)郵件那樣簡單,它將建立一個轉(zhuǎn)發(fā)郵件,這并非一個方法就能做到。這些郵件體包含在成為Multipart的容器中對于MIME類型郵件來講就是MimeMultiPart類對象。說明一下,復(fù)制一個郵件內(nèi)容到另一個郵件的方法是僅復(fù)制它的DataHandler(數(shù)據(jù)處理者)即可。// Create the message to forwardMessage forward = new MimeMessage(session)。(new InternetAddress(from))。// Create your new message partBodyPart messageBodyPart = new MimeBodyPart()。// Create a multipart to bine the partsMultipart multipart = new MimeMultipart()。// Create and fill part for the forwarded contentmessageBodyPart = new MimeBodyPart()。// Add part to multi part(messageBodyPart)。// Send message(forward)。發(fā)送帶有附件的郵件發(fā)送帶有附件的郵件的過程有些類似轉(zhuǎn)發(fā)郵件,需要建立一個完整郵件的各個郵件體部分,在第一個部分(即郵件內(nèi)容文字)后,增加一個具有DataHandler的附件而不是在轉(zhuǎn)發(fā)郵件時那樣復(fù)制第一個部分的DataHandler。然后將這個數(shù)據(jù)源(FileDataSource或是URLDataSource)對象作為DataHandler類構(gòu)造方法的參數(shù)傳入,從而建立一個DataHandler對象作為數(shù)據(jù)源的DataHandler。這樣就完成了郵件體與附件之間的關(guān)聯(lián)工作,下面的工作就是BodyPart的setFileName()方法設(shè)置附件名為原文件名。// Define messageMessage message = new MimeMessage(session)。(, new InternetAddress(to))。// Create the message part BodyPart messageBodyPart = new MimeBodyPart()。Multipart multipart = new MimeMultipart()。// Part two is attachmentmessageBodyPart = new MimeBodyPart()。(new DataHandler(source))。(messageBodyPart)。// Send the message(message)。FORM ENCTYPE=multipart/formdata method=post action=/myservlet INPUT TYPE=file NAME=thefileINPUT TYPE=submit VALUE=Upload /FORM讀取郵件中的附件讀取郵件中的附件的過程要比發(fā)送它的過程復(fù)雜一點。但是如何辨別郵件信息內(nèi)容和附件呢?Sun在Part類(BodyPart類實現(xiàn)的接口類)中提供了getDisposition()方法讓開發(fā)者獲得郵件體部分的部署類型,當(dāng)該部分是附件時。Multipart mp = (Multipart)()。 in。 amp。}}下列代碼中使用了saveFile方法是自定義的方法,它根據(jù)附件的文件名建立一個文件,如果本地磁盤上存在名為附件的文件,那么將在文件名后增加數(shù)字表示區(qū)別。// from saveFile()File file = new File(filename)。 ()。}以上是郵件體部分被正確設(shè)置的簡單例子,如果郵件體部分的部署類型為null,那么通過獲得郵件體部分的MIME類型來判斷其類型作相應(yīng)的處理,代碼結(jié)構(gòu)框架如下:if (disposition == null) { // Check if plainMimeBodyPart mbp = (MimeBodyPart)part。 發(fā)送HTML郵件假如需要發(fā)送一個HTML文件作為郵件內(nèi)容,并使郵件客戶端在讀取郵件時獲取相關(guān)的圖片或者文字的話,只要設(shè)置郵件內(nèi)容為html代碼,并設(shè)置內(nèi)容類型為text/html即可:String htmlText = H1Hello/H1 + img src=\\。請注意:這里的圖片并不是在郵件中內(nèi)嵌的,而是在URL中定義的。 在接收郵件時,如果使用JavaMail API接收郵件的話是無法實現(xiàn)以HTML方式顯示郵件內(nèi)容的。所以要顯示HTML內(nèi)容的郵件,必須使用JEditorPane或者第三方HTML展現(xiàn)組件。 JFrame frame = new JFrame()。 (false)。 ().add(pane)。 ()。 }在郵件中包含圖片如果在郵件中使用HTML作為內(nèi)容,那么最好將HTML中使用的圖片作為郵件的一部分,這樣無論是否在線都會正確的顯示HTML中的圖片。 處理內(nèi)嵌圖片就像向郵件中添加附件一樣,不同之處在于必須通過設(shè)置圖片附件所在的郵件體部分的header中ContentID為一個隨機字符串,并在HTML中img的src標(biāo)記中設(shè)置為該字符串。String file = ...。// Fill its headers(Embedded Image)。(, new InternetAddress(to))。String htmlText = H1Hello/H1 + img src=\cid:memememe\。// Create a related multipart to bine the partsMimeMultipart multipart = new MimeMultipart(related)。// Create part for the imagemessageBodyPart = new MimeBodyPart()。(new DataHandler(fds))。// Add part to multipart(messageBodyPart)。 在郵件中搜索短語JavaMail API提供了過濾器機制,它被用來建立搜索短語。Message[] msgs = (st)。下面是一個實例:在Folder中搜索郵件主題含有“ADV”字符串或者發(fā)信人地址為friend。 Message[] msgs = (st)。電子郵件()是因特網(wǎng)上使用得最多的和最受用戶歡迎的一種應(yīng)用。上述的性質(zhì)相當(dāng)于利用因特網(wǎng)為用戶建立了存放郵件的信箱,因此有時也稱為“電子信箱”。據(jù)有的公司報道,使用電子郵件后可提高勞動生產(chǎn)率30%以上。本設(shè)計是基于Java的郵件客戶端,是一個實現(xiàn)電子郵件收、發(fā)功能的應(yīng)用程序,可直接安裝于PC機上執(zhí)行,無需進(jìn)行任何配置,只要在相應(yīng)位置輸入用戶名和密碼,即可享受電子通信的便捷,功能與OutLook Express、FoxMail等專業(yè)郵件客戶端相仿。 概要設(shè)計電子郵件的主要組成構(gòu)件如圖41所示:用戶代理郵件服務(wù)器用戶代理郵件服務(wù)器(發(fā)送郵件)SMTP(TCP連接)(發(fā)送郵件)SMTP(TCP連接)(發(fā)送郵件)POP3(TCP連接)圖41 電子郵件主要組成構(gòu)件用戶代理就是用戶與電子郵件系統(tǒng)的接口,大多情況下就是在用戶PC機中運行的程序,也就是本設(shè)計的郵件客戶端。例如,應(yīng)讓用戶能共創(chuàng)建便于使用的通訊錄(有常用的人名和地址)。(3)處理,處理包括發(fā)送郵件和接收郵件。例如,閱讀后刪除、存盤、打印、轉(zhuǎn)發(fā)等,以及自建目錄對來信進(jìn)行分類保存。 電子郵件傳輸過程郵件服務(wù)器是電子郵件系統(tǒng)的核心構(gòu)件,因特網(wǎng)上所有的ISP都有郵件服務(wù)器。郵件服務(wù)器按照客戶服務(wù)器方式工作。一個協(xié)議用于發(fā)送郵件,即SMTP協(xié)議,而另一個協(xié)議用于接收郵件,即郵局協(xié)議POP(Post Office Protocol)。(1)發(fā)信人調(diào)用用戶代理編輯要發(fā)送的郵件,用戶代理用SMTP將郵件傳送給發(fā)送端服務(wù)器;(2)發(fā)送端郵件服務(wù)器把郵件收入郵件緩存隊列中,等待發(fā)送;(3)運行在發(fā)送端郵件服務(wù)器的SMTP客戶進(jìn)程,發(fā)現(xiàn)在郵件緩存中有待發(fā)送的郵件,就向運行在接收端郵件服務(wù)器的SMTP服務(wù)器進(jìn)程發(fā)起TCP連接的建立;(4)當(dāng)TCP連接建立后,SMTP客戶進(jìn)程開始向遠(yuǎn)程的SMTP服務(wù)器進(jìn)程發(fā)送郵件,如果有多個郵件在郵件緩存中,則SMTP客戶一一把它們發(fā)送到遠(yuǎn)程的SMTP服務(wù)器,當(dāng)所有的待發(fā)送郵件發(fā)完了,SMTP就關(guān)閉所建立的TCP連接;(5)運行在接收端郵件服務(wù)器中的SMTP服務(wù)器進(jìn)程收到郵件后,把郵件放入收信人的用戶郵箱中,等待收信人在他方便時進(jìn)行讀取;(6)收信人在打算收信時,調(diào)用用戶代理,使用POP3 (或IMAP)協(xié)議把自己的郵件從接收端郵件服務(wù)器的用戶郵件箱中取回(如果郵箱中有來信的話)。收件箱主要通過POP3協(xié)議來接收、查看郵件,并可存儲發(fā)件人地址到通訊錄,對無需保存的郵件可直接刪除,發(fā)到垃圾箱,對需要回復(fù)的郵件則轉(zhuǎn)到發(fā)件箱發(fā)送郵件;發(fā)件箱則通過SMTP協(xié)議發(fā)送郵件,可以從通訊錄中查找收件人或自己輸入收件人以及直接回復(fù)郵件,發(fā)送時也可將新輸入的收信人地址存入通訊錄,對發(fā)送后的郵件,有需要保留的,可存草稿到草稿箱;草稿箱主要用來編輯不待立即發(fā)送的郵件和發(fā)件時的草稿,也可對保存的已發(fā)郵件進(jìn)行修改后或不需任何更改直接發(fā)送,轉(zhuǎn)到發(fā)件箱,對無保存需要的草稿可進(jìn)行刪除,轉(zhuǎn)到垃圾箱;垃圾箱主要用來存放無用的、被刪除的郵件,可再次刪除確無價值的郵件,執(zhí)行徹底刪除,也可對誤刪或仍有用的郵件進(jìn)行還原,轉(zhuǎn)到郵件的先前存放處。前期工作準(zhǔn)備完畢,就是具體、詳細(xì)的設(shè)計過程,其中包括了各部分的結(jié)構(gòu)圖、流程圖及UML框圖。1) 先在網(wǎng)上下載好源文件,然后安裝,點擊“Next”,如圖43;2) 選擇安裝或刪除(對已安裝用戶來說),點擊“Next”,如圖44;3) 選擇安裝內(nèi)容,點擊“Next”,如圖45;4) 安裝完成,點擊“Finish”,如圖46。它們控制著多種程序的行為。任何用戶都可以添加、修改或刪除用戶的環(huán)境變量。JDK中的javac是進(jìn)行編譯java源程序的,其實可以在dos下通過把路徑改到j(luò)dk的BIN目錄下執(zhí)行或者是在編譯時就帶上這些路徑,但是經(jīng)常這樣肯定是很麻煩的。.”,注意后面的分號是來分隔路徑的“.”是指的當(dāng)前路徑,為什么要指明當(dāng)前路徑呢,因為分號前面的是jdk的公共類庫所在路徑,而我們的程序總會用自己的類,所以程序得到的類存放的當(dāng)前路徑也要放在里面。%SystemRoot%\syste