JavaMail

JavaMail

 

1 JavaMail概述

Java Mail是由SUN公司提供的專門針對郵件的API,主要Jar包:mail.jar、activation.jar。

在使用MyEclipse創建web項目時,需要小心!如果只是在web項目中使用java mail是沒有什麼問題的,發佈到Tomcat上運行一點問題都沒有!

但是如果是在web項目中寫測試那就出問題了。

在MyEclipse中,會自動給web項目導入javax.mail包中的類,但是不全(其實是隻有接口,而沒有接口的實現類),所以只靠MyEclipse中的類是不能運行java mail項目的,但是如果這時你再去自行導入mail.jar時,就會出現衝突。

處理方案:到下面路徑中找到javaee.jar文件,把javax.mail刪除!!!

D:\Program Files\MyEclipse\Common\plugins\com.genuitec.eclipse.j2eedt.core_10.0.0.me201110301321\data\libraryset\EE_5

 

2 JavaMail中主要類

java mail中主要類:javax.mail.Session、javax.mail.internet.MimeMessage、javax.mail.Transport。

Session:表示會話,即客戶端與郵件服務器之間的會話!想獲得會話需要給出賬戶和密碼,當然還要給出服務器名稱。在郵件服務中的Session對象,就相當於連接數據庫時的Connection對象。

MimeMessage:表示郵件類,它是Message的子類。它包含郵件的主題(標題)、內容,收件人地址、發件人地址,還可以設置抄送和暗送,甚至還可以設置附件。

Transport:用來發送郵件。它是發送器!

 

3 JavaMail之Hello World

在使用telnet發郵件時,還需要自己來處理Base64編碼的問題,但使用JavaMail就不必理會這些問題了,都由JavaMail來處理。

第一步:獲得Session

Session session = Session.getInstance(Properties prop, Authenticator auth);

其中prop需要指定兩個鍵值,一個是指定服務器主機名,另一個是指定是否需要認證!我們當然需要認證!

Properties prop = new Properties();

prop.setProperty(“mail.host”, “smtp.163.com”);//設置服務器主機名

prop.setProperty(“mail.smtp.auth”, “true”);//設置需要認證

 

其中Authenticator是一個接口表示認證器,即校驗客戶端的身份。我們需要自己來實現這個接口,實現這個接口需要使用賬戶和密碼。

Authenticator auth = new Authenticator() {

    public PasswordAuthentication getPasswordAuthentication () {

        new PasswordAuthentication(“itcast_cxf”, “itcast”);//用戶名和密碼

}

};

通過上面的準備,現在可以獲取得Session對象了:

Session session = Session.getInstance(prop, auth);

 

第二步:創建MimeMessage對象

創建MimeMessage需要使用Session對象來創建:

MimeMessage msg = new MimeMessage(session);

然後需要設置發信人地址、收信人地址、主題,以及郵件正文。

msg.setFrom(new InternetAddress(“[email protected]”));//設置發信人

msg.addRecipients(RecipientType.TO, “[email protected],[email protected]”);//設置多個收信人

msg.addRecipients(RecipientType.CC, “[email protected],[email protected]”);//設置多個抄送

msg.addRecipients(RecipientType.BCC, ”[email protected]”);//設置暗送

msg.setSubject(“這是一封測試郵件”);//設置主題(標題)

msg.setContent(“當然是hello world!”, “text/plain;charset=utf-8”);//設置正文

 

第三步:發送郵件

Transport.send(msg);//發送郵件

 

4 JavaMail發送帶有附件的郵件(瞭解)

一封郵件可以包含正文、附件N個,所以正文與N個附件都是郵件的一個部份。

上面的hello world案例中,只是發送了帶有正文的郵件!所以在調用setContent()方法時直接設置了正文,如果想發送帶有附件郵件,那麼需要設置郵件的內容爲MimeMultiPart。

MimeMulitpart parts = new MimeMulitpart();//多部件對象,可以理解爲是部件的集合

msg.setContent(parts);//設置郵件的內容爲多部件內容。

然後我們需要把正文、N個附件創建爲“主體部件”對象(MimeBodyPart),添加到MimeMuiltPart中即可。

MimeBodyPart part1 = new MimeBodyPart();//創建一個部件

part1.setCotnent(“這是正文部分”, “text/html;charset=utf-8”);//給部件設置內容

parts.addBodyPart(part1);//把部件添加到部件集中。

 

下面我們創建一個附件:

MimeBodyPart part2 = new MimeBodyPart();//創建一個部件

part2.attachFile(“F:\\a.jpg”);//設置附件

part2.setFileName(“hello.jpg”);//設置附件名稱

parts.addBodyPart(part2);//把附件添加到部件集中

 

注意,如果在設置文件名稱時,文件名稱中包含了中文的話,那麼需要使用MimeUitlity類來給中文編碼:

part2.setFileName(MimeUitlity.encodeText(“美女.jpg”));

  

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