29.06.2013 Views

JavaMail使用

JavaMail使用

JavaMail使用

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

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!