javamail服務(wù)器簡介_第1頁
javamail服務(wù)器簡介_第2頁
javamail服務(wù)器簡介_第3頁
javamail服務(wù)器簡介_第4頁
javamail服務(wù)器簡介_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、JavaMail詳細(xì)介紹33.1 JavaMail簡介JavaMail,顧名思義,提供給開發(fā)者處理電子郵件相關(guān)的編程接口。它是Sun發(fā)布的用來處理email的API。它可以方便地執(zhí)行一些常用的郵件傳輸。我們可以基于JavaMail開發(fā)出類似于Microsoft Outlook的應(yīng)用程序。雖然JavaMail是Sun的API之一,但它目前還沒有被加在標(biāo)準(zhǔn)的java開發(fā)工具包中(Java Development Kit),這就意味著你在使用前必須另外下載JavaMail文件。除此以外,你還需要有Sun的JavaBeans Activation Framework (JAF)。JavaBeans A

2、ctivation Framework的運行很復(fù)雜,在這里簡單的說就是JavaMail的運行必須得依賴于它的支持。在Windows 2000下使用需要指定這些文件的路徑,在其它的操作系統(tǒng)上也類似。JavaMail是可選包,因此如果需要使用的話你需要首先從下載。目前最新版本是JavaMail1.4,使用JavaMail的時候需要Javabean Activation Framework的支持,因此你也需要下載JAF。安裝JavaMail只是需要把他們加入到CLASSPATH中去,如果你不想修改CLASSPATH的話,可以直接把他們的jar包直接copy到JAVA_HOME/lib/ext下。這樣

3、JavaMail就安裝好了。JavaMail包中用于處理電子郵件的核心類是:Session,Message,Address,Authenticator,Transport,Store,Folder等。Session定義了一個基本的郵件會話,它需要從Properties中讀取類似于郵件服務(wù)器,用戶名和密碼等信息。33.2 郵件收發(fā)協(xié)議POP3(Post Office Protocol 3)即郵局協(xié)議的第3個版本,它規(guī)定怎樣將個人計算機(jī)連接到Internet的郵件服務(wù)器和下載電子郵件的電子協(xié)議。它是因特網(wǎng)電子郵件的第一個離線協(xié)議標(biāo)準(zhǔn),POP3允許用戶從服務(wù)器上把郵件存儲到本地主機(jī)(即自己的計算機(jī))

4、上,同時刪除保存在郵件服務(wù)器上的郵件,而POP3服務(wù)器則是遵循POP3協(xié)議的接收郵件服務(wù)器,用來接收電子郵件的。SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協(xié)議,它是一組用于由源地址到目的地址傳送郵件的規(guī)則,由它來控制信件的中轉(zhuǎn)方式。SMTP協(xié)議屬于TCPIP協(xié)議族,它幫助每臺計算機(jī)在發(fā)送或中轉(zhuǎn)信件時找到下一個目的地。通過SMTP協(xié)議所指定的服務(wù)器,我們就可以把Email寄到收信人的服務(wù)器上了,整個過程只要幾分鐘。SMTP服務(wù)器則是遵循SMTP協(xié)議的發(fā)送郵件服務(wù)器,用來發(fā)送或中轉(zhuǎn)你發(fā)出的電子郵件。33.3 James服務(wù)器Apache James(Jav

5、a Apache Mail Enterprise Server)是Apache組織的子項目之一,完全采用純Java技術(shù)開發(fā),實現(xiàn)了SMTP、POP3與NNTP等多種郵件相關(guān)協(xié)議。James是一個郵件應(yīng)用平臺,可以通過Mailet擴(kuò)充其功能,如Mail2SMS、Mail2Fax等。James提供了比較完善的配置方案,尤其是關(guān)于郵件內(nèi)容存儲和用戶信息存儲部分,可以選擇在文件、數(shù)據(jù)庫或其他介質(zhì)中保存。James性能穩(wěn)定、可配置性強(qiáng),還是開源項目,所有源代碼不存在版權(quán)問題,因此,James在項目中的應(yīng)用日益廣泛。33.3.1 啟動JAMES 我們可以從Apache James 的官方站點下載到我們所需

6、要的James服務(wù)器及源碼 James服務(wù)器(ZIP版)下載地址: l 將james-binary-2.3.1.zip解壓到純英文目錄下l 運行bin目錄下的run.bat(在運行之前請確保您的Java環(huán)境變量已配置成功,否則將提示運行失敗) 圖33.1表示James服務(wù)器已啟動成功:圖 33.1 啟動james服務(wù)l 服務(wù)器啟動成功后,將自動在apps目錄下根據(jù)james.sar文件生成相應(yīng)的James發(fā)布文件包。33.3.2 用Telnet管理用戶用cmd進(jìn)入MS-DOS,輸入telnet localhost 4555 (注:localhost是郵件服務(wù)器名,4555是管理端口,可在app

7、sjamesSAR-INFconfig.xml文件中配置,在此我們使用其默認(rèn)配置) 然后輸入用戶名和密碼(在配置文件config.xml中,默認(rèn)為用戶名:root密碼:root) 如圖33.2所示說明登陸成功: 圖 33.2 用root用戶登陸登陸成功后,我們就可以開始對用戶信息進(jìn)行增、刪、查、改等操作了。 常用的用戶信息操作命令參見下表:l Currently implemented commands:                

8、  常用實現(xiàn)命令 l help                display this help            顯示幫助信息 l listusers           display existing accounts&

9、#160;   顯示現(xiàn)有賬戶 l countusers          display the number of existing accounts 顯示現(xiàn)有賬戶數(shù)量 l adduser username password   add a new user   添加一個新用戶 l verify username   verify if specified user exist  核實指定用戶是否存在 l delu

10、ser username   delete existing user        刪除存在的用戶 l setpassword username password   sets a user's password  設(shè)置用戶密碼 l setalias user alias   locally forwards all email for 'user' to 'alias' 設(shè)置郵箱別名 l showalias us

11、ername   shows a user's current email alias 顯示別名 l unsetalias user     unsets an alias for 'user'    刪除用戶別名 l setforwarding username emailaddress   forwards a user's email to another email address      轉(zhuǎn)發(fā)

12、用戶的電子郵件地址到另一個電子郵件地址 l showforwarding username shows a user's current email forwarding 顯示用戶的當(dāng)前郵件轉(zhuǎn)發(fā) l unsetforwarding username     removes a forward         刪除轉(zhuǎn)發(fā) l user repositoryname    change to another user repository

13、60;  改變另一個用戶庫 l shutdown kills the current JVM (convenient when James is run as a daemon)  關(guān)閉當(dāng)前的服務(wù) l quit                close connection             

14、 關(guān)閉連接 我們可以輸入命令:adduser chenfengcn 881213來添加一個的郵件用戶,則其用戶名為:chenfengcn,密碼為:881213,郵箱地址為:chenfengcnlocalhost(用戶名后的域名跟服務(wù)器配置的域名相同)33.4 JavaMail API簡介打開JavaMail.jar文件,我們將發(fā)現(xiàn)在javax.mail的包下面存在著一些核心類:Session、Message、Address、Authenticator、Transport、Store、Folder。而且在ernet包中還有一些常用的子類。l Session類定義了基本

15、的郵件會話。就像Http會話那樣,我們進(jìn)行收發(fā)郵件的工作都是基于這個會話的。Session對象利用了java.util.Properties對象獲得了郵件服務(wù)器、用戶名、密碼信息和整個應(yīng)用程序都要使用到的共享信息。Session類的構(gòu)造方法是私有的,所以我們可以使用Session類提供的getDefaultInstance()這個靜態(tài)工廠方法獲得一個默認(rèn)的Session對象:Properties props = new Properties();/ fill props with any informationSession session = Session.getDefaultInstan

16、ce(props, null);或者使用getInstance()這個靜態(tài)工廠方法獲得自定義的Session: Properties props = new Properties();/ fill props with any informationSession session = Session.getInstance(props, null);l Message:當(dāng)我們建立了Session對象后,便可以被發(fā)送的構(gòu)造信息體了。在這里SUN提供了Message類型來幫助開發(fā)者完成這項工作。由于Message是一個抽象類,大多數(shù)情況下,我們使用ernet.MimeM

17、essage這個子類,該類是使用MIME類型、MIME信息頭的郵箱信息。信息頭只能使用US-ASCII字符,而非ASCII字符將通過編碼轉(zhuǎn)換為ASCII的方式使用。為了建立一個MimeMessage對象,我們必須將Session對象作為MimeMessage構(gòu)造方法的參數(shù)傳入:MimeMessage message = new MimeMessage(session);注意:對于MimeMessage類來講存在著多種構(gòu)造方法,比如使用輸入流作為參數(shù)的構(gòu)造方法。在建立了MimeMessage對象后,我們需要設(shè)置它的各個part,對于MimeMessage類來說,這些part就是MimePart接

18、口。最基本的設(shè)置信息內(nèi)容的方法就是通過表示信息內(nèi)容和米么類型的參數(shù)調(diào)用setContent()方法:message.setContent("Hello", "text/plain");然而,如果我們所使用的MimeMessage中信息內(nèi)容是文本的話,我們便可以直接使用setText()方法來方便的設(shè)置文本內(nèi)容。message.setText("Hello");前面所講的兩種方法,對于文本信息,后者更為合適。而對于其它的一些信息類型,比如HTML信息,則要使用前者。別忘記了,使用setSubject()方法對郵件設(shè)置郵件主題:messa

19、ge.setSubject("First");l Address: 到這里,我們已經(jīng)建立了Session和Message,下面將介紹如何使用郵件地址類:Address。像Message一樣,Address類也是一個抽象類,所以我們將使用ernet.InternetAddress這個子類。通過傳入代表郵件地址的字符串,我們可以建立一個郵件地址類:Address address = new InternetAddress(""); 如果要在郵件地址后面增加名字的話,可以通過傳遞兩個參數(shù)

20、:代表郵件地址和名字的字符串來建立一個具有郵件地址和名字的郵件地址類:Address address = new InternetAddress("", "George Bush"); 本文在這里所講的郵件地址類是為了設(shè)置郵件信息的發(fā)信人和收信人而準(zhǔn)備的,在建立了郵件地址類后,我們通過message的setFrom()和setReplyTo()兩種方法設(shè)置郵件的發(fā)信人:message.setFrom(address);message.setReplyTo(address);若在郵件中存在多個發(fā)信人地址,我們可

21、用addForm()方法增加發(fā)信人:Address address = .;message.addFrom(address);為了設(shè)置收信人,我們使用addRecipient()方法增加收信人,此方法需要使用Message.RecipientType的常量來區(qū)分收信人的類型:message.addRecipient(type, address)下面是Message.RecipientType的三個常量:Message.RecipientType.TOMessage.RecipientType.CCMessage.RecipientType.BCC因此,如果我們要發(fā)送郵件給總統(tǒng),并發(fā)用一個副本給

22、第一夫人的話,下面的方法將被用到:Address toAddress = new InternetAddress("");Address ccAddress = new InternetAddress("");message.addRecipient(Message.RecipientType.TO, toAddress);message.addRecipient(Message.RecipientType.CC, ccAddress);JavaMai

23、l API并沒有提供檢查郵件地址有效性的機(jī)制。當(dāng)然我們可以自己完成這個功能:驗證郵件地址的字符是否按照RFC822規(guī)定的格式書寫或者通過DNS服務(wù)器上的MX記錄驗證等。l Authenticator:像類那樣,JavaMail API通過使用授權(quán)者類(Authenticator)以用戶名、密碼的方式訪問那些受到保護(hù)的資源,在這里“資源”就是指郵件服務(wù)器。在javax.mail包中可以找到這個JavaMail的授權(quán)者類(Authenticator)。在使用Authenticator這個抽象類時,我們必須采用繼承該抽象類的方式,并且該繼承類必須具有返回PasswordAuthentication對

24、象(用于存儲認(rèn)證時要用到的用戶名、密碼)getPasswordAuthentication()方法。并且要在Session中進(jìn)行注冊,使Session能夠了解在認(rèn)證時該使用哪個類。下面代碼片斷中的MyAuthenticator就是一個Authenticator的子類。Properties props = new Properties();/ fill props with any informationAuthenticator auth = new MyAuthenticator();Session session = Session.getDefaultInstance(props, au

25、th);l Transport:在發(fā)送信息時,Transport類將被用到。這個類實現(xiàn)了發(fā)送信息的協(xié)議(通稱為SMTP),此類是一個抽象類,我們可以使用這個類的靜態(tài)方法send()來發(fā)送消息:Transport.send(message);當(dāng)然,方法是多樣的。我們也可由Session獲得相應(yīng)協(xié)議對應(yīng)的Transport實例。并通過傳遞用戶名、密碼、郵件服務(wù)器主機(jī)名等參數(shù)建立與郵件服務(wù)器的連接,并使用sendMessage()方法將信息發(fā)送,最后關(guān)閉連接:message.saveChanges(); / implicit with send()Transport transport = sess

26、ion.getTransport("smtp");transport.connect(host, username, password);transport.sendMessage(message, message.getAllRecipients();transport.close();l Store和Folder:接收郵件和發(fā)送郵件很類似都要用到Session。但是在獲得Session后,我們需要從Session中獲取特定類型的Store,然后連接到Store,這里的Store代表了存儲郵件的郵件服務(wù)器。在連接Store的過程中,極有可能需要用到用戶名、密碼或者Auth

27、enticator。/ Store store = session.getStore("imap");Store store = session.getStore("pop3");store.connect(host, username, password);在連接到Store后,一個Folder對象即目錄對象將通過Store的getFolder()方法被返回,我們可從這個Folder中讀取郵件信息:Folder folder = store.getFolder("INBOX");folder.open(Folder.READ_ONL

28、Y);Message message = folder.getMessages();上面的例子首先從Store中獲得INBOX這個Folder(對于POP3協(xié)議只有一個名為INBOX的Folder有效),然后以只讀(Folder.READ_ONLY)的方式打開Folder,最后調(diào)用Folder的getMessages()方法得到目錄中所有Message的數(shù)組。33.5 使用JavaMail進(jìn)行Javamail開發(fā)需要用到兩個包:mail.jar和activation.jar,在開始Javamail編程之前,請自己將這兩個包添加到IDE的Build path中或?qū)⑦@兩個包的路徑配置到環(huán)境變量中。

29、發(fā)送郵件需要兩個類:一個是SMTP用戶身份認(rèn)證類(James在默認(rèn)情況下,是需要SMTP身份認(rèn)證的);另一個就是我們的郵件發(fā)送類,為簡單起見,我們直接將郵件的相關(guān)信息,如:標(biāo)題、內(nèi)容、發(fā)送者、接收者等信息直接寫在類中,運行main()函數(shù)即發(fā)送。當(dāng)然,你同樣可以為自己的郵件發(fā)送系統(tǒng)構(gòu)造一個郵件發(fā)送介面,通過Servlet將相關(guān)參數(shù)傳遞至后臺進(jìn)行處理與發(fā)送。其主要代碼也就是此main()函數(shù)中的內(nèi)容 Java 源代碼(SmtpAuth.java)Package com.hb.javamail.sample; /* * 用于身份認(rèn)證 * * */ public class SmtpAuth ext

30、ends javax.mail.Authenticator private String user, password; /* * * param getuser * param getpassword */ public void setUserinfo(String getuser, String getpassword) user = getuser; password = getpassword; protected javax.mail.PasswordAuthentication getPasswordAuthentication() return new javax.mail.P

31、asswordAuthentication(user, password); public String getPassword() return password; public void setPassword(String password) this.password = password; public String getUser() return user; public void setUser(String user) this.user = user; SendMail.java發(fā)送郵件代碼 Java 源代碼(SendMail.java)package com.hb.jav

32、amail.sample;import java.util.Properties;import javax.mail.Message;import javax.mail.MessagingException;import javax.mail.Session;import javax.mail.Transport;import javax.mail.URLName;import ernet.AddressException;import ernet.InternetAddress;import ernet.Mi

33、meBodyPart;import ernet.MimeMessage;import ernet.MimeMultipart;public class SendMail public static void main(String args) / 初始化信息 String sender = "chenfengcn" String password = "881213" String smtpServer = "localhost" String recipient = "

34、;chenfengcnlocalhost" String subject = "測試郵件主題" String fileAttachment = "" /附件 String content = "測試郵件內(nèi)容" / 配置服務(wù)器屬性 Properties proper = new Properties(); proper.put("mail.smtp.host", smtpServer); / smtp服務(wù)器 proper.put("mail.smtp.auth", "true"); / 是否smtp認(rèn)證 proper.put("mail.smtp.port&qu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論