星期日, 1月 19, 2020

使用 SendGrid in Azure 發送信件小記

使用 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 驗證

這邊要注意的一點是
  • 因為是透過 Azure 來申請, 所以在 SendGrid 官網上面的使用者名稱是 xxxxxxx@auzre.com 不是我們填入的 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:

沒有留言: