生活随笔
收集整理的這篇文章主要介紹了
JMail 应用实践(一)--- 简介用Java程序发送email
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?用JavaMail 發送電子郵件雖然很簡單,但是對于未接觸過的朋友,它還存在著一絲神秘。本文通過用一個簡單的Java 應用程序發送一封電子郵件來揭開這片神秘的面紗,而對于郵件協議等等內容,這里暫不涉及---東西太多了就像云霧一樣遮住了雙眼。這方面以后還需要跟大家專門探討一下。
?
?????? JavaMail API 是一個用于閱讀、編寫和發送電子消息的可選包(標準擴展),與Microsoft Outlook、FoxMail之類的軟件功能相似。這也可以看出,API本身的用途并不是用來傳輸、發送和轉發電子消息,這些都是郵件服務器的工作,JMail API 用來創建郵件用戶代理(Mail User Agent)類型程序,郵件服務器我們以后再介紹。
?
?????? 在開始介紹一下本示例的運行環境:
??????·Window 2000 Server sp4
????·JDK 6u10b
??? ·JMail API v1.4.2
??? ·JAF API v1.1 (JavaBean Activation Framework) 這個是JMail API依賴的支持庫
???·Eclipse 3.4 for J2EE Developers
?
?
???
????用JavaMail發送電子郵件的過程比較簡單,大致分為以下四個步驟:
?
????1. 創建Properties?對象,設置郵件服務器屬性:mail.smtp.host?,其指定你的SMTP服務器,這個服務器不用擔心,我們就用163現成的。
?
????? 2.? 建立一個郵件會話,你可以創建若干個郵件會話,有興趣可以研究研究
?
????? 3.? 創建你的郵件信息對象,該對象包含了你的郵件的全部內容,包括發送人,接受人,標題,正文,附件等內容
?
??? 4.?郵件傳輸,郵件的傳輸只有送出和收到兩中狀態。JavaMail 將之稱為傳輸和存儲。這里我只展示發送郵件??
?
??????? 用代碼來描述如下所示:
Java代碼?
String?host?=?...;??? String?from?=?...;??? String?to?=?...;??? ?? ?? Properties?props?=?System.getProperties();?? ?? ?? props.put("mail.smtp.host" ,?host);?? ?? ?? Session?session?=?Session.getDefaultInstance(props,?null );?? ?? try ?{???????? ????MimeMessage?message?=?new ?MimeMessage(session);?? ????message.setFrom(new ?InternetAddress(from));?? ????message.addRecipient(Message.RecipientType.TO,?new ?InternetAddress(?? ????????????to));?? ????message.setSubject("HelloWorld?JavaMail" );?? ????message.setText("Welcome?to?JavaMail?World!" );?? ?? ?????? ????Transport.send(message);?? ?? }?catch ?(MessagingException?e)?{?? ?????? ????e.printStackTrace();?? }??
?
?????? 以上已經描述用JMail?發送郵件的大致過程,如果你有一個免費的不需要帳戶認證的公用郵件服務器,上面的程序已經可以用來發送郵件了。(不過我沒有找到這樣的郵件服務器,不過可以自己配置一個^_^)
?
?
?????? 眼見為實,不真正發送成功一個郵件,始終會讓人覺得掉胃口。要想那樣,我們需要稍微修改上面的程序,完整的程序如下:
Java代碼?
package ?com.zhaipuhong.j2ee.jmail;???? import ?java.util.Properties;???? import ?javax.mail.Authenticator;??import ?javax.mail.Message;??import ?javax.mail.MessagingException;??import ?javax.mail.PasswordAuthentication;??import ?javax.mail.Session;??import ?javax.mail.Transport;??import ?javax.mail.internet.InternetAddress;??import ?javax.mail.internet.MimeMessage;???? public ?class ?HelloJMail?{???????? ???????public ?static ?void ?sendMail()?{?? ????String?host?=?"smtp.163.com" ;??? ????String?from?=?"" ;??? ????String?to?=?"" ;??? ????final ?String?username?=?"" ;???? ????final ?String?password?=?"" ;????? ?? ?????? ????Properties?props?=?System.getProperties();?? ?? ?????? ????props.put("mail.smtp.host" ,?host);?? ????props.put("mail.smtp.auth" ,?"true" );????? ?? ?????? ????Session?session?=?Session.getDefaultInstance(props,?new ?Authenticator(){???? ????????@Override ?? ????????public ?PasswordAuthentication?getPasswordAuthentication()?{?? ????????????return ?new ?PasswordAuthentication(username,?password);?? ????????}?? ?????????????? ????});?? ?? ????try ?{?? ?????????????? ?????????MimeMessage?message?=?new ?MimeMessage(session);?? ???????????????????????message.setFrom(new ?InternetAddress(from));?? ???????????message.addRecipient(Message.RecipientType.TO,?new ?InternetAddress(?? ????????????????????to));?? ???????????message.setSubject("HelloWorld?JavaMail" );?? ???????????????????????message.setText("Welcome?to?JavaMail?World!" );?? ?? ????????????? ??????????? ?????????Transport.send(message);?? ?? ????}?catch ?(MessagingException?e)?{?? ????????e.printStackTrace();?? ????}?? ??????}?? ?? ??????public ?static ?void ?main(String[]?args)?{?? ????HelloJMail.sendMail();?? ??????}?? ?? }??
???? 上面的程序把我的郵箱帳號信息刪除了,測試的時候補充你自己的郵箱帳號信息即可使用:
Java代碼?
……?? public ?static ?void ?sendMail()?{?????????String?host?=?"smtp.163.com" ;??? ???String?from?=?"" ;??? ???String?to?=?"" ;??? ???final ?String?username?=?"" ;???? ???final ?String?password?=?"" ;?????
?
?
????? FAQ:
???? 1. 如果你遇到“……553 authentication is required……”
????? 請檢查你的如下設置是否正確:
?
Java代碼?
……?? ?? props.put("mail.smtp.auth" ,?"true" );?? ?? ……?? Session?session?=?Session.getDefaultInstance(props,?new ?Authenticator(){?? ????????????@Override ?? ????????????public ?PasswordAuthentication?getPasswordAuthentication()?{?? ????????????????return ?new ?PasswordAuthentication(username,?password);?? ????????????}?? ?????????????? });?? ?? ……??
????? 2.?如果你遇到“……java.lang.NoClassDefFoundError……com/sun/mail/util/SharedByteArrayInputS?、?? com/sun/mail/util/MailDateFormat……?? ”?之類的錯誤
????? 可能你的項目中引用了j2ee.jar包,里面包含有jmail API,與你添加到classpath中的jmail.jar版本不一樣或者內容有差別等造成,你需要在classpath中把你剛添加的jmail.jar和activation.jar放在j2ee.jar的前面,在IDE中,就在類庫中把這兩個包“move up”到j2ee.jar包的上面。
新人創作打卡挑戰賽 發博客就能抽獎!定制產品紅包拿不停!
總結
以上是生活随笔 為你收集整理的JMail 应用实践(一)--- 简介用Java程序发送email 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。