Amazon – SES 設定 Email,讓使用者寄信/伺服器收信/轉寄給管理者

流程

提供 Email 做測試

還未提交審核前,收發 Email 只有在認證過的 Email 或 Domain 可以通訊。所以首先我們先認證 Domain 跟一組 Email 做測試。

打開 Amazon SES (Amazon Simple Email Service)

Domain > Verify a New Domain 建立一個網域並驗證

輸入網域後,點選 Verify This Domain

接著要驗證新的 Domain,這兩筆資料,會顯示在你的 Route 53

接著會跳出警告訊息說,MX 紀錄 (MX Type) 會覆蓋你原本有的設定。假如你有特殊設定過的話,請不要覆蓋。但因為我們沒有,所以打勾後點選 Create Record Sets。

這時候在準備驗證 Domain,大概等個五分鐘左右

因為剛剛我們加入了 『TXT 紀錄』『MX 紀錄』所以,可以到 Route 53 看看我們裡面出現了這兩筆

回到 Amazon SES 後可以看到 Domain 已經驗證成功 (Verified)

發信

因為目前在沙盒模式中,只能寄信給驗證過的 Email,所以在這裡加入 Email

填入 Email

接著我們打開自己的 Email 驗證

未認證的時候會出現這樣

從信件中的認證網址連出去後,可以看到認證成功

列表狀態會變成 verifed

這時候我們可以發送測試信件,從 網域 寄送到剛剛認 證過的 Email,看看我們的網域能不能收到

From 的帳號名稱可以自訂,可以打 service 或 admin 之類,寫好後發送測試信件

再到我們自己的信箱中,就可以成功看到由 Amazon 寄來的信件了。

如果要使用 SMTP 給自己的程式語言發信的話,這邊有 Server 連接的名稱,第一次我們要點選左側的 SMTP Settings > Create My SMTP Credentials 來建立一個使用者。

Create 建立

這邊就能看到 SMTP 的 Username 與 Password ,把他儲存下來,因為 Password 日後忘記的話 Amazon 是無法找到的。

Amazon I Am 中就可以看到你目前有的使用者囉

 

收信

參考官方說明。在 SES 中設定收信規則

設定一個規則名稱

進入後點選 Create Rule

Recipient 保持空白,直接點選下一步

選擇 Amazon S3

選擇 Create S3 bucket。這是在 S3 建立一個收信夾的概念。這裡提供官方說明『如果您選擇在 Amazon S3 儲存貯體中存放訊息,訊息的大小上限 (包含標頭) 為 30 MB。如果您選擇透過 Amazon SNS 通知接收訊息,訊息的大小上限 (包含標頭) 為 150 KB。』參考官方

輸入自訂的貯體 Bucket 名稱後,點選 Create Bucket

選擇你貯體後,點選下一步

自訂名稱後,並注意勾選。點選下一步

檢查無誤後,建立規則

 

列表出現,狀態顯示 Enabled

前往 Amazon S3 可以看到已經建立貯體

點進去,會看到有預設的 AMAZON_SES_SETUP_NOTIFICATION,可以忽略。如果我們認證的網域收到信,都會在這邊顯示檔案 (Email 原始資料)

試著發一封 Email 到我們的網域

在 Amazon S3 的 Bucket 中就可以看到這封字串的檔案名稱,下載下來後打開,就能看到 Email 的原始碼。

基本上到這邊,發信最簡單,收信就比較麻煩。目前收信看到的是原始格式,如果要進一步解析可參考這篇 使用 SDK PHP 取得列表與內容

轉寄

要怎麼將 Email 原始檔轉寄給其他管理人 (例如 Jason@gmail.com) 呢?那就透過  S3 的 API + EmailParser 來製作。下面這個完整範例,依序:

  1. API 取得 Bucket
  2. API 取得 Object
  3. 用 EmailParse 分析
  4. 用 PHPMailer 發送
  5. API 刪除已經發送過的 Object

為了方便說明流程,所以不使用 Class 封裝,轉換為自己的程式碼的時候記得寫漂亮一點喔!

這裡要注意發信人的部分,務必要是已經認證過的 Domains 或 Email 才可以喔。

假設你的 Domain 是 abc.com 那麼發信人應該如 service@abc.com。因為是交由 Amazon 轉寄的動作,所以如果你的發信者填上了別的地址如 (jason@gmail.com),而這個使用者名稱又沒有在 SES 中的 Identity Management 認證過,那麼 SMTP 就會發送失敗,出現錯誤訊息喔!

定時收信

若在 Linux 的話,可以使用 apt-get install curl 安裝 curl 套件,透過 CURL 去訪問你的 PHP 定時觸發。 PHP 定時觸發,網路上很多教學囉,大致上簡略介紹如下

 

繼續閱讀

 

Comments

發表迴響