JavaMail使用

JavaMail使用 JavaMail使用

arbor.ee.ntu.edu.tw
from arbor.ee.ntu.edu.tw More from this publisher
29.06.2013 Views

JavaMail Web Mail Bi-Ru Dai 20年多,被使用在商業,家庭上 傳送非常簡單,反倒是所傳遞的內容比較 複雜(MIME,Multipurpose Internet Mail Extensions) JavaMail 2 1

JavaMail<br />

Web Mail<br />

Bi-Ru Dai<br />

20年多,被使用在商業,家庭上<br />

傳送非常簡單,反倒是所傳遞的內容比較<br />

複雜(MIME,Multipurpose Internet Mail<br />

Extensions)<br />

JavaMail 2<br />

1


Java API<br />

Java API本來是獨立的一部份,後來被納<br />

入J2EE的核心內<br />

是一個抽象類別來使訊息基礎系統可以<br />

實作出來<br />

可用在Java程式,servlet,bean或applet<br />

Mail Protocol<br />

核心通訊協定<br />

JavaMail 3<br />

Simple Mail Transport Protocol (SMTP)<br />

Post Office Protocol version 3 (POP3)<br />

Internet Message Access Protocol (IMAP)<br />

包裝信件內容的傳送協定<br />

Multipurpose Internet Mail Extension (MIME)<br />

JavaMail 4<br />

2


SMTP<br />

1982 first proposed<br />

用來將郵件送到伺服器<br />

只是一個送信的助理,並不用來收信<br />

由於SMTP像是一個中繼伺服器,所以常被<br />

人濫用來散發廣告信.因此,許多網管設定<br />

SMTP功能只能寄給伺服器所接受的特定<br />

網址<br />

SMTP<br />

JavaMail 5<br />

了解SMTP伺服器功能的限制使很重要的,<br />

因為同樣的問題也會出現在JavaMail 應<br />

用程式上<br />

SMTP 標頭欄位不能超過 512字元.資料<br />

部分不能超過1000字元.這些都由<br />

JavaMail API來處理<br />

RFC 821<br />

JavaMail 6<br />

3


POP3<br />

1984 first proposed<br />

1988 version 3 final<br />

提供大多數人收取電子郵件<br />

領取,儲存或移除郵件<br />

但卻不提供儲存郵件的功能<br />

RFC 1939<br />

IMAP<br />

企業級郵件伺服器所採用的<br />

JavaMail 7<br />

除了POP3原來所提供的功能,還提供檔案<br />

櫃架構來處理與儲存在伺服器上的郵件,<br />

且技巧地不需要將郵件下載到客戶端,與<br />

所使用來登入的客戶端無關<br />

且除了提供儲存郵件功能,還有傳送與搜<br />

尋郵件的功能<br />

JavaMail 8<br />

4


IMAP<br />

使伺服器負擔較重,且當IMAP伺服器壞了,就會<br />

損失所有人的郵件<br />

雖然說JavaMail API有支援,但是有些功能還是<br />

不包含在其中,特別功能只有伺服器支援才有<br />

IMAP並不普遍,<br />

Microsoft Exchange,Lotus cc:Mail, and Eudora<br />

WorldMail等等<br />

RFC 2060<br />

MIME<br />

JavaMail 9<br />

一般來說,網路郵件都是傳遞純文字檔案,<br />

並不允許非文字資料<br />

傳遞純文字檔案比較容易確保傳遞成功<br />

由於使用需求,將二進位檔案轉換成純文<br />

字檔案來傳遞;轉換的規則就是由MIME<br />

來規範<br />

雖然有些麻煩,但JavaMail API已經處理<br />

好了<br />

JavaMail 10<br />

5


JavaMail概論<br />

儘管功能很多,但主要分成四部分<br />

Session Management傳送郵件連線管理<br />

Message Manipulation郵件處理<br />

Mail Storage and Retrieval郵件儲存<br />

Transportation傳送郵件<br />

安裝與設定設定<br />

下載安裝:<br />

JavaMail 11<br />

JavaBeans Activation Framework(JAF)<br />

將activation.jar複製到C:\j2sdk\lib<br />

JavaMail API (或J2EE)<br />

將mail.jar複製到C:\j2sdk\lib<br />

設定CLASSPATH新增:<br />

C: \j2sdk\lib\activation.jar; C:<br />

\j2sdk\lib\mail.jar;<br />

JavaMail 12<br />

6


First JavaMail Example<br />

假設:<br />

由Mail server允許的IP位址發送郵件<br />

設定From,To與Subject欄位<br />

獨立執行的程式:FirstSendMail.java<br />

JavaMail API<br />

JavaMail 13<br />

javax.mail.Session 郵件連線管理<br />

javax.mail.Authenticator 安全認證<br />

javax.mail.Message 郵件內容設定<br />

javax.mail.intenet.MimeMessage<br />

javax.mail.Part<br />

javax.mail.Multipart<br />

JavaMail 14<br />

7


JavaMail API<br />

javax.mail.Address 取得郵件地址<br />

javax.mail.internet.InternetAddress<br />

javax.mail.internet.NewsAddress<br />

javax.mail.Store 取得檔案夾<br />

javax.mail.URLName<br />

javax.mail.Folder 取得信件資料<br />

javax.mail.Transport<br />

使用JavaMail<br />

寄信 javamail_send.java<br />

JavaMail 15<br />

寄含附件信件 javamail_send_attachment.java<br />

收信 javamail_pop.java<br />

刪除郵件<br />

儲存附件<br />

儲存郵件(包含附件) javamail_save.java<br />

寄出所有郵件(.e-mail) javamail_sendAll.java<br />

JavaMail 16<br />

8


JSP 範例<br />

javamail.jsp<br />

javamail1.jsp<br />

傳送郵件連線<br />

JavaMail 17<br />

javax.mail.Session<br />

跟Servlet不一樣,目的並不是來共享資源<br />

只是建立連線所需要的資訊<br />

沒有認證功能<br />

沒有建構元;藉由呼叫其中的函數來建立<br />

static Session getInstance(Properties prop)不共<br />

享<br />

static Session getDefaultInstance(Properties<br />

prop)共享<br />

JavaMail 18<br />

9


傳送郵件連線<br />

JavaMail的屬性使用properties 來定義<br />

Properties<br />

java.util.Properties<br />

JavaMail 19<br />

javax.mail.Message 類別<br />

Header<br />

Content(MIME)<br />

JavaMail 20<br />

10


javax.mail.Message<br />

Message<br />

Header<br />

Part<br />

MultiPart<br />

BodyPart<br />

BodyPart<br />

BodyPart<br />

MultiPart<br />

BodyPart<br />

BodyPart<br />

BodyPart<br />

BodyPart BodyPart<br />

JavaMail 21<br />

javax.mail.Message 類別<br />

From<br />

To,CC, and BCC<br />

Reply-To<br />

Subject<br />

Date<br />

MessageID<br />

Other : setHeader(n,v),getHeader(n,d)<br />

JavaMail 22<br />

11


javax.mail.URLName<br />

://:@[:][/]<br />

Ex:<br />

pop3://lodavid:12345@ms16.hinet.net<br />

javax.mail.Store<br />

從 Session取得<br />

getStore()<br />

getStore(Provider provider)<br />

getStore(String protocol)<br />

JavaMail 23<br />

getStore(URLName urlname)<br />

Connect<br />

JavaMail 24<br />

12


javax.mail.FetchProfile<br />

抓取所需要的郵件資料欄位<br />

FetchProfile.Item.ENVELOPE<br />

FetchProfile.Item.CONTENT_INFO<br />

FetchProfile.Item.FLAGS<br />

References<br />

JavaMail 25<br />

http://www.oac.uci.edu.tw/indiv/ehood/<br />

MIME/MIME.html<br />

http://java.sun.com/beans/glasgow/jaf.<br />

html<br />

http://java.sun.com/products/javamail/<br />

http://www.juru.com/faq/home.jsp?topi<br />

c=JavaMail<br />

http://macspeed.net/<br />

JavaMail 26<br />

13

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!