如果我們做了一個課程報名網站,使用者填完資料,畫面顯示「報名成功」,這樣就結束了嗎?
你應該會收到一封信,告訴你報名了哪堂課、什麼時候上課,之後忘記時間也能回信箱找。那這封信是誰寄的,總不會每有人報名,工程師就打開 Gmail 手動寄一封吧 XD
這時就可以在後端程式加上寄信功能,報名成功後,把收件人的信箱、主旨、內容交給 Amazon SES,請它幫我們寄出去。SES 全名是 Simple Email Service,就是 AWS 提供的郵件服務
但這裡有個問題,如果我把寄件人填成別人的信箱,AWS 也照寄嗎?
當然不能讓你想填誰就填誰哈哈,所以在寫程式之前,我們得先證明這個寄件信箱是自己能使用的。今天就來做這段設定哩~
我們會先在自己的電腦執行 Node.js 程式,透過 SES 寄一封信給自己。等這段跑通了,再把寄信功能接進網站,會比較知道問題出在哪裡
圖裡沒有 EC2,也沒有資料庫。因為這次只要確認「我的程式能不能請 SES 寄信」,自己的電腦就可以做,不必先把整個網站架起來
回到剛剛的報名情境,SES 並不知道誰報名成功。要不要寄、寄給誰,還是得由我們的程式決定,SES 負責的是後面的寄送工作
進 SES 建立寄件身分時,會看到 Email address 和 Domain 兩種選項。或許你會想,我只是想寄封信,怎麼連網域都跑出來了?
以公司網站來說好了,假設公司有自己的 example.com,想用 service@example.com 寄通知,就可以選 Domain,去網域的 DNS 後台加上 AWS 指定的紀錄,證明這個網域是公司管理的
那如果我現在只有 Gmail 呢?
這次就選 Email address,填自己的 Gmail。AWS 會寄一封驗證信過來,你能收到信、點裡面的連結,就能完成驗證
這個經過驗證、可以拿來寄信的 Email 或網域,在 SES 裡就叫 Identity(寄件身分)。兩種方式的差異可以看 AWS 的說明
搜尋 SES,進入 Amazon Simple Email Service,右上角選 Asia Pacific (Tokyo),也就是 ap-northeast-1,再點左側 Account dashboard
你看中間黃色那段,這個帳號目前還在 Sandbox。意思是 AWS 先讓我們在有限制的情況下試寄,還不能直接拿一整份學生名單來發通知
限制在哪裡呢?除了寄件人,一般收件人的信箱也要先驗證,而且沙盒預設每 24 小時最多寄 200 封、每秒最多 1 封。AWS 另外有提供測試收件服務,但今天我們直接用自己的信箱就好
所以如果我驗證了自己的 Gmail,想寄給同事,他的信箱還沒驗證,就可能被 SES 擋下來
這也是為什麼這次會安排「自己寄給自己」,寄件人跟收件人都填同一個 Gmail,驗證一個信箱就能練了
等網站真的要寄信給學生,再申請 Production access,核准移出 Sandbox 後,就不用叫每位學生先驗證信箱
到左側 Configuration → Identities,點右邊的 Create identity
上圖是已經驗證過的清單,所以會看到綠色的 Verified。如果你的信箱已經在裡面、也是這個狀態,就不用再建一次。旁邊那筆 Domain 是另一個寄件身分,這次不用跟著做
進到表單後,選 Email address,填自己的完整信箱:
下面的 Assign a default configuration set、Assign to a tenant 先不勾,Tags 留空,這次先把信箱驗證好就好
確認地址沒打錯,按右下角 Create identity。接著去自己的信箱,找 AWS 寄來的 Email Address Verification Request,打開後點驗證連結,再回 SES 的 Identities 頁面重新整理
看到自己的 Email 那列變成 Verified,這一步就完成了
我會建議 Gmail 先拿來練習,正式網站改用自己管理的網域。為啥呢?
剛剛點驗證連結,是讓 SES 確認你能使用這個信箱。但之後 Gmail 收到 SES 寄來的信,還會檢查:「寄件地址寫 Gmail,這封信怎麼是從 Amazon 那邊送來的?」
我們能登入自己的 Gmail,卻不能替 Google 設定 gmail.com 的寄件認證。所以下篇實際寄信時,有可能看到來源警示,或者會進垃圾郵件,甚至被拒收
如果改用公司的網域,我們就能在 DNS 設定 DKIM 等寄件認證,讓收信端核對郵件的簽章;也能設定 DMARC,檢查認證的網域和寄件地址是否對得上,並告訴收信端沒通過時要怎麼處理
前面練 EC2、RDS,我們會注意資源有沒有一直開著,那這個信箱收費方式呢?
你可以到左側 Pricing plan 看目前方案。以下用一封信只有一位收件人來算基本寄送費:
| 方案 | 每 1,000 封 | 寄 10 封 |
|---|---|---|
| Essentials,第一個用量級距 | US$0.16 | US$0.0016 |
| À la carte | US$0.10 | US$0.001 |
這裡還沒算郵件資料量、加購功能、稅或免費額度,實際以 SES 官方價格 和自己的方案為準
今天先做到自己的 Email 在東京 SES 顯示 Verified 就好,下篇就來接上 Node.js,真的寄一封給自己,再去信箱看看有沒有收到。我們下篇見 :D