javaweb之郵件發送

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(“”, “”);//用戶名和密碼
}
};
通過上面的準備,現在可以獲取得Session對象了:
Session session = Session.getInstance(prop, auth);

第二步:創建MimeMessage對象
創建MimeMessage需要使用Session對象來創建:
MimeMessage msg = new MimeMessage(session);
然後需要設置發信人地址、收信人地址、主題,以及郵件正文。
msg.setFrom(new InternetAddress(“。。。@163.com”));//設置發信人
msg.addRecipients(RecipientType.TO, “。。。@qq.com,。。。@sina.com”);//設置多個收信人
msg.addRecipients(RecipientType.CC, “。。。@sohu.com,。。。@126.com”);//設置多個抄送
msg.addRecipients(RecipientType.BCC, ”。。。@hotmail.com”);//設置暗送
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”));

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