使用 SendGrid in Azure 發送信件小記
最近因為專案的關係, 可能會使用 smokeping 來嘗試監控網路狀況
因為想要設置告警的關係, 所以來測試在 Public Cloud 內發送信件通知
公有雲因為政策的關係, 目前不允許讓公有雲內的 VM 直接使用 SMTP 發信, 但是可以使用公有雲內建的服務或是第三方的服務.
測試的第三方服務是 SendGrid
- SendGrid 官方網站
- 原因是 Azure , GCP, AWS 都有支援
- 免費計劃每月可以發送 25,000 封 e-mail , 以通知信件來說應該很充足
- 有 WebAPI 以及 SMTP Relay 兩種, 程式或是系統都可以使用
參考 Azure 官方文件
申請 SendGrid 帳號
首先登入 Azure Portal
建立資源 -- > 搜尋 SendGrid -- > 出現Marketplace 中 SendGrid -- > 點選 建立
輸入相關資訊
Pricing Tier 預設就是 Free
點選 Review + Create
點選 Create 建立帳戶
這邊遇到一個 Bug 就是
- 申請欄位的 Website 沒有紅色的 * , 但是如果你沒有填的話會建立失敗....
- 解法, 填個值進去就可以了
建立完成之後, 來驗證 e-mail
有驗證 e-mail 以及沒有驗證 e-mail 發送信件的次數是不一樣的
到剛剛建立的 SendGrid 服務, 點選 Manage
這個時候會另外開一個分頁, 導向到 SendGrid 網站
進入之後就會要求驗證 e-mail
回到信箱收信, 點選 Confirm Email Address
完成 e-mail 驗證
這邊要注意的一點是
建立 API Key
接下來就是建立 API Key
到剛剛建立的 SendGrid 服務, 點選 Manage
導向到 SendGrid 網站
點選畫面左方的 Settings -- > API Keys
然後點選 Create API Key
輸入 Key 名稱 -- > API Key Permission: 我是選 Restricted Access, 然後 Mail Send 給 Full Access
點選 Create and View
這樣就產生 API Key
只會出現一次, 記得把他記錄下來
建立完成之後, 畫面上也會出現那把 Key 的 資訊
接下來就要進行寄信的測試了
點選畫面左邊的 Email API -- > Integration Guide
我選擇推薦的 Web API 方式
選取要使用的語言
這邊我選 cURL 方式
接下來就會進入引導如何使用 curl 傳送信件
可以在步驟 2 Create an API Key 的地方, 輸入 另外一把測試 Key 名稱
點選 Create Key
系統會自動將產出的 Key 內容帶入到 Step 3
將 Step 3 的變數內容在 終端機內執行
將 Step 4 的變數內容在 終端機內執行 ( 也可以把 to: 後面的郵件換成自己的郵件 )
勾選 “I’ve exectuted the code about”
點選 Next: Verify Integration
點選 Verify integration
可以確認 SendGrid 有收到 Request, 也可以到 Email Activity 去觀察
當然也可以到自己的信箱去確認
- 使用官方的方式建立 API Key, 可以觀察到, 他也是用 Restricted Access, 然後 Mail Send 給 Full Access, 但是 Scheduled Sends 是完全關閉, 這個可以視情境不同來適用
使用 curl 方式達成之後, 接下來使用 Python 的方式
做法一樣
建立一個 API Key
將變數存成 sendgrid.env
將 sendgrid.env 列為 .gitignore 內的檔案
source ./sendgrid.env
接下來
使用 pip 指令安裝 sendgrid
# pip3 install sendgrid
建立 python 檔案測試, 我建立一個 sendmail_use_sendgrid.py
內容如下
檔案可以參考 Github 上面
curl 以及 python 的方式都測試完, 最後就是 SMTP Relay
一樣回到 Integration Guide
選取 SMTP Relay
這邊就相對簡單
- SendGrid 可以支援 port 25 / 587 ( smtp ) 以及 465 ( smtps )
- 帳號 是 apikey , 密碼就是自己的 API KEY
這樣今天就完成三種從 SendGrid 發送郵件方式
- curl
- Python
- SMTP
~ enjoy it
Reference:
沒有留言:
張貼留言