JavaMail發送郵件和附件(源碼)_1

JavaMail是什麼?

JavaMailSun發佈的處理電子郵件的應用程序接口,它預置了一些最常用的郵件傳送協議的實現方法,並且提供了很容易的方法去調用它們。JavaMailSun發佈的應用程序接口,所以目前它還沒有被JDK包含。因此你需要從Sun的官方網站上下載到JavaMail類文件包。除此之外還需要SunJAF(JavaBeans Activation Framework ),否則JavaMail將不能運行。

核心JavaMail API 由七個類組成:Session Message Address Authenticator Transport Store Folder ,它們都來自javax.mail 、即JavaMail API 頂級包。可以用這些類完成大量常見的電子郵件任務,包括髮送消息、檢索消息、刪除消息、認證、回覆消息、轉發消息、管理附件、處理基於HTML文件格式的消息以及搜索或過濾郵件列表。有關JavaMail 的更多信息,請參考JavaMail 指南。

 

JavaMail的基礎知識

使用JavaMail是發送電子郵件所需要的組件

JavaMail的機構使處理電子郵件非常容易。下面列出了一些我們需要的類:

1Properties

JavaMail需要Properties來創建一個session對象。它將尋找字符串"mail.smtp.host",屬性值就是發送郵件的主機,如:

Properties props = new Properties ();

props.put("mail.smtp.host", "smtp.sina.com"); // 可以換上你的smtp主機名。

props.put("mail.smtp.auth", "true"); // 身份驗證,目前免費郵件服務器都需要這一項

2Session

這個Session類代表JavaMail中的一個郵件會話。每一個基於JavaMail的應用程序至少有一個Session(可以有任意多的Session)。在這個例子中,Session對象需要知道用來處理郵件的SMTP服務器。爲了做到這一點,你可以參照下面的例子用Properties 來創建一個Session 對象

Session session = Session.getDefaultInstance(props, null);

3Transport

郵件是既可以被髮送也可以被受到。JavaMail使用了兩個不同的類來完成這兩個功能:Transport Store Transport 是用來發送信息的,而Store用來收信。對於這的教程我們只需要用到Transport對象。Store的用法請參看SunJavaMail文檔。

用法:Transport transport = session.getTransport("smtp");

JavaMail Session對象的getTransport 方法來初始化Transport。傳過去的字符串申明瞭對象所要使用的協議,如"smtp"。這將爲我們省了很多時間。因爲JavaMail已經內置了很多協議的實現方法。

注意: JavaMail並不是絕對支持每一個協議,目前支持IMAP SMTP POP3

4Message

Message對象將存儲我們實際發送的電子郵件信息,Message對象被作爲一個MimeMessage對象來創建並且需要知道應當選擇哪一個JavaMail session

使用方法是:Message message = new MimeMessage(session);

 

郵件亂碼問題:

JavaMail中的郵件主題需要進行BASE64編碼,格式形如:=?GBK?B?xPq1xMPcwuvS0b6t1tjWw6Osx+u+ob/stcfCvKOssqLQ3rjEw9zC66Oh?=

所以,直接使用message.setSubject("中文主題"),或者message.setSubject("中文主題".getBytes ("ISO-8859-1"), "GBK"))都一樣會出現亂碼。在設置郵件主題前需要將主題字串的字節編碼爲BASE64格式,並添加編碼頭,示例代碼如下:

sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();

msg.setSubject("=?GBK?B?"+enc.encode(subject.getBytes())+"?=");

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章