Java Mail 用 SMTP 透過 Amazon SES (Simple Email Service) 寄信

本文主要是說明 如何用 JavaMail 透過 Amazon SES 寄信

有時候需要一個穩定的 SMTP 主機來幫忙寄訊息,除了自己架主機和透過 Gmail 以外,Amazon 也有一個雲端服務叫做 Amazon SES (Simple Email Service) 可以利用。玩了一下,在考慮不想付費的情況下:

  • 一開啟服務後你就有了一個測試環境(Sandbox),每天可以免費寄200封信給你登記並"通過認證的收件人"。
    • 通過認證的收信人就是,Amazon 會寄封認證信給該收件人,該收件人點信中連結回覆就算通過認證了(就跟一般網站認證很像)。
  • 申請並通過 SES Production Access 後,每天可以免費寄2000封信給"任意收件人"。

程式碼很短但事前步驟有點小多,筆記一下怕以後要用到時又會忘掉。

參考

事前準備

  1. 註冊 Amazon Web Service 帳號。
  2. 取得 Sandbox 環境或是更進一步取得 SES Production Access 環境。
    1. Sandbox 環境
      1. SES 主控台,進入 Verified Senders>Email Addresses>Verify a New Email Address 登記測試環境下要用來測試的收件人。
      2. 收件人通過認證後,就可以直接透過SES 主控台,進入 Verified Senders>Email Addresses>Send a Test Email 來寄信。
    2. SES Production Access 環境
      1. 如果你每天想要寄超過200封信,或是有寄給陌生人的需求,就要填寫表格申請轉換至 SES Production Access,審核結果會在24小時內完成。
  3. 通過前面兩個步驟後,就可以透過 Web Console, AWS SDK 來寄送,但若是用 SMTP 來寄信,必須要到 SES 主控台,進入 SMTP Settings>Create My SMTP Credentials 建立一組帳號密碼。

參考

程式碼

提醒!!

  • 記得專案要 include Java Mail 的 jar 檔。
  • 記得去 SES 主控台建立 SMTP Credentials 取得帳號密碼。

我按官方這篇 Sending an Email Through the Amazon SES SMTP Interface with Java 會發生 java.lang.SecurityException: Access to default session denied ,所以改了一個自己的版本如下:

參考