iT邦幫忙

2026 iThome 鐵人賽

DAY 19
0
IT Operation

從前後端踏上 AWS 雲端架構勇者之路系列 第 19 篇

SES 郵件服務(上):先讓 AWS 認得寄件信箱

  • 分享至 

  • xImage
  •  

如果我們做了一個課程報名網站,使用者填完資料,畫面顯示「報名成功」,這樣就結束了嗎?

你應該會收到一封信,告訴你報名了哪堂課、什麼時候上課,之後忘記時間也能回信箱找。那這封信是誰寄的,總不會每有人報名,工程師就打開 Gmail 手動寄一封吧 XD

這時就可以在後端程式加上寄信功能,報名成功後,把收件人的信箱、主旨、內容交給 Amazon SES,請它幫我們寄出去。SES 全名是 Simple Email Service,就是 AWS 提供的郵件服務

但這裡有個問題,如果我把寄件人填成別人的信箱,AWS 也照寄嗎?

當然不能讓你想填誰就填誰哈哈,所以在寫程式之前,我們得先證明這個寄件信箱是自己能使用的。今天就來做這段設定哩~

SES 寄信流程

我們會先在自己的電腦執行 Node.js 程式,透過 SES 寄一封信給自己。等這段跑通了,再把寄信功能接進網站,會比較知道問題出在哪裡

本機 Node.js 請 SES 寄信到自己的信箱;今天先完成 Email identity 驗證,程式寄信留到下篇

圖裡沒有 EC2,也沒有資料庫。因為這次只要確認「我的程式能不能請 SES 寄信」,自己的電腦就可以做,不必先把整個網站架起來

回到剛剛的報名情境,SES 並不知道誰報名成功。要不要寄、寄給誰,還是得由我們的程式決定,SES 負責的是後面的寄送工作

這次先用自己的 Gmail 練習

進 SES 建立寄件身分時,會看到 Email address 和 Domain 兩種選項。或許你會想,我只是想寄封信,怎麼連網域都跑出來了?

以公司網站來說好了,假設公司有自己的 example.com,想用 service@example.com 寄通知,就可以選 Domain,去網域的 DNS 後台加上 AWS 指定的紀錄,證明這個網域是公司管理的

那如果我現在只有 Gmail 呢?

這次就選 Email address,填自己的 Gmail。AWS 會寄一封驗證信過來,你能收到信、點裡面的連結,就能完成驗證

這個經過驗證、可以拿來寄信的 Email 或網域,在 SES 裡就叫 Identity(寄件身分)。兩種方式的差異可以看 AWS 的說明

進 SES 準備寄信嘍~

搜尋 SES,進入 Amazon Simple Email Service,右上角選 Asia Pacific (Tokyo),也就是 ap-northeast-1,再點左側 Account dashboard

SES Account dashboard 實拍:東京區域、Sandbox 提示、Sending limits 與 Account health

你看中間黃色那段,這個帳號目前還在 Sandbox。意思是 AWS 先讓我們在有限制的情況下試寄,還不能直接拿一整份學生名單來發通知

限制在哪裡呢?除了寄件人,一般收件人的信箱也要先驗證,而且沙盒預設每 24 小時最多寄 200 封、每秒最多 1 封。AWS 另外有提供測試收件服務,但今天我們直接用自己的信箱就好

所以如果我驗證了自己的 Gmail,想寄給同事,他的信箱還沒驗證,就可能被 SES 擋下來

這也是為什麼這次會安排「自己寄給自己」,寄件人跟收件人都填同一個 Gmail,驗證一個信箱就能練了

等網站真的要寄信給學生,再申請 Production access,核准移出 Sandbox 後,就不用叫每位學生先驗證信箱

實際把信箱加進去

到左側 Configuration → Identities,點右邊的 Create identity

SES Identities 實拍:左側入口、Create identity 按鈕與既有 Verified 清單;這次只需要 Email address

上圖是已經驗證過的清單,所以會看到綠色的 Verified。如果你的信箱已經在裡面、也是這個狀態,就不用再建一次。旁邊那筆 Domain 是另一個寄件身分,這次不用跟著做

進到表單後,選 Email address,填自己的完整信箱:

Create identity 表單實拍:選 Email address,填自己的信箱;圖中的 you@example.com 只是填寫位置示範

下面的 Assign a default configuration set、Assign to a tenant 先不勾,Tags 留空,這次先把信箱驗證好就好

確認地址沒打錯,按右下角 Create identity。接著去自己的信箱,找 AWS 寄來的 Email Address Verification Request,打開後點驗證連結,再回 SES 的 Identities 頁面重新整理

看到自己的 Email 那列變成 Verified,這一步就完成了

驗證完,就可以拿 Gmail 寄正式通知了嗎?

我會建議 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


上一篇
用 DBeaver 經過 EC2,連進私有 RDS
系列文
從前後端踏上 AWS 雲端架構勇者之路 共 19 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言