JavaMail使用
JavaMail使用 JavaMail使用
JavaMail Web Mail Bi-Ru Dai 20年多,被使用在商業,家庭上 傳送非常簡單,反倒是所傳遞的內容比較 複雜(MIME,Multipurpose Internet Mail Extensions) JavaMail 2 1
- Page 2 and 3: Java API Java API本來是獨立
- Page 4 and 5: POP3 1984 first proposed 1988 ver
- Page 6 and 7: JavaMail概論 儘管功能很多,
- Page 8 and 9: JavaMail API javax.mail.Address
- Page 10 and 11: 傳送郵件連線 JavaMail的屬
- Page 12 and 13: javax.mail.URLName ://:@[:][/] Ex
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