五分鐘快速搭建Serverless免費郵件服務

  • 2020 年 7 月 23 日
  • 筆記

1. 引言

本文將帶你快速基於 Azure Function 和 SendGrid 構建一個免費的Serverless(無伺服器)的郵件發送服務,讓你感受下Serverless的強大之處。

該服務可以每月免費發送2,5000封,這是完全白嫖啊,感興趣的,趕緊動起你的小手爪,噼里啪啦搞起來呀。

2. 創建 SendGrid 帳號

你要有一個Azure帳號,沒有的話,花幾分鐘自行註冊一個就好。(我的帳號註冊在香港區域)
咱們先來創建一個SendGrid Accounts,如下圖所示。點擊SendGrid Accounts後,再點擊創建SendGrid account。
SendGrid Accounts

image.png

填寫完畢後,點擊Review+Create,稍等片刻,提示部署成功,那麼恭喜你,可以接著往下玩耍了。如果部署失敗,可能會因為SendGrid屏蔽了某些區域的帳號創建,就只能重新註冊個Azure帳號玩耍了。

緊接著,前往剛剛創建的SendGrid Account,點擊Manage會跳轉至SendGrid管理面板。
SendGrid Account
打開後,會要求你進去郵件驗證,自行前往郵箱驗證即可。
SendGrid Dashboard

點擊API Keys,然後點擊Create API Key,填寫API Key Name,選擇 Full Access,點擊Create&View,記下生成的API Key,後面需要用到。
創建ApiKey

3. 創建第一個函數應用

回到Azure控制台,然後搜索函數應用
搜索函數應用
打開後點擊添加,按以下圖示進行創建。其中務必選擇以程式碼發布,承載的作業系統選擇Windows。
Create Azure Function

創建成功後,轉到資源,如下圖所示:
Azure Function

依次點擊函數,添加,選擇HTTP trigger模板,填寫函數名稱,然後指定身份驗證級別。

Create HTTP trigger

點擊創建,創建成功後,跳轉到函數頁面,點擊獲取函數URL,粘貼URL到瀏覽器就可以訪問到你創建的第一個函數應用。
First Httptrigger Function

點擊程式碼+測試,就可以看到模板程式碼,如下圖所示:
Httptrigger 模板程式碼

從截圖來看,這個和C#的語法並無太大差別,官方稱為C#腳本。
緊接著替換run.csx為以下程式碼並點擊保存:

//run.csx
#r "Newtonsoft.Json"
#r "SendGrid"

using System.Net;
using Microsoft.Azure.WebJobs.Host;
using SendGrid.Helpers.Mail;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;

public static SendGridMessage Run(Email req, ILogger log)
{
    var reqStr = JsonConvert.SerializeObject(req);
    log.LogInformation(reqStr);

    var message = new SendGridMessage();
    message.AddTo(req.To);
    message.AddContent("text/html", req.Body);
    message.SetFrom(new EmailAddress(req.From));
    message.SetSubject(req.Subject);
    return message;
}

public class Email
{
    public string To { get; set; }
    public string From { get; set; }
    public string Subject { get; set; }
    public string Body { get; set; }
}

然後修改function.json中的配置如下,並保存。

{
  "bindings": [
    {
      "authLevel": "function",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "sendGrid",
      "name": "$return",
      "direction": "out",
      "apiKey": "SendGridAPIKeyAsAppSetting"
    }
  ]
}

注意觀察配置項中需要指定apiKey,就是我們上面創建SendGrid Account 中對應的ApiKey。回到上面創建的Azure Function 應用服務,然後按下圖添加上面發郵件函數需要的配置項,如下所示。
添加配置項

添加完畢後,再回到函數中就可以測試運行了,如下圖所示:

查收郵件,你將收到來自Azure Function & SendGrid 的免費問候。

查收郵件

當然,也可以通過Postman自行驗證:
image.png

4.最後

通過以上的連環操作,相信你不僅成功薅了一把微軟的羊毛,而且順帶對Serverless也有了一定的認知。
如果對Azure Function感興趣的,不妨參考官方文檔研究一番,相信你會發掘不少玩法,順便再薅它幾把羊毛,哈哈哈!