Java寄送電子郵件-使用gmail帳號

JavaMail是個歷史悠久的寄送電子郵件Email套件,由Sun公司所開發(Oracle),因為電子郵件數年來並沒有多大的改變,所以一直都是十分方便的一個套件,使用方法可參考Java程式Mail、EDM(電子型錄)寄送這篇。

而現在有了另一個framework,是由Apache組職所提供的開放原始碼套件Apache Commons email,使用上更為簡單,而且支援度也很高,像是gmail要使用javamail來寄送,就需要設定繁雜的Sectury項目,而Apache commons email就顯的簡單許多,底下的範例就是使用gmail的smtp.gmail.com來當SMTP服務寄送信件的,我把它應用在之前的留言板,當有人留言時,就可以馬上接到信件的通知。

留言板存檔後寄信

收到信件的內容

這範例需要的lib是Apache commons email,寄件的方法,需先建立一個Email主體,可以是SimpleEmail,寄送純文字,也可以是HtmlEmail,寄送html內容,也可以對Email主體進行attach附加文件的功能。

比較特別的是gmail需要使用到TLS或SSL加密,所以需要對Email主體設定setTSL為真及利用setAuthenticator來告知道驗證用的帳號及密碼。

原始碼如下:

mail.properties

Sender

這是寄Mail的Thread,寫成線程可以不用等待SMTP回報傳送結果,所以寄送成功與否並不會回傳到前端,如此可以減少前端等待寄Mail的時間。

如果想把這個範例使用到之前範例留言板,可以把程式碼加到postAction.jsp裡。

2014/12/27備註

  • 還需要一個mail.jar在javamail專案裡有
  • http://www.oracle.com/technetwork/java/javamail/index-138643.html
  • 另外新版的apache HtmlMail不建議使用setTSL(true);可改用setStartTLSEnabled(true);

2016/11/30補充

上面的範例目前應該會出現

這裡提供另一個範例

如果沒有加

會跟上面的範例有一樣的狀況

另外如果帳號有二階段認證的話可以參考這篇

Java MailAPI Example – Send an Email via GMail SMTP (TLS Authentication)

Getting error? How to triage an issue?




2 comments on “Java寄送電子郵件-使用gmail帳號

  1. 我下載了java6,卻下載不成,因為有個程式需要用到java6,所以我嘗試下載,第一次用可以,但用到後面又不小心刪了,但本來想要在下載一次,卻下載不成,請幫忙求解!

發表迴響