1. 程式人生 > >五分鐘快速搭建Serverless免費郵件服務

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

![](https://upload-images.jianshu.io/upload_images/2799767-508cd8bd0a9c2fe7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) # 1. 引言 本文將帶你快速基於 Azure Function 和 SendGrid 構建一個免費的Serverless(無伺服器)的郵件傳送服務,讓你感受下Serverless的強大之處。 該服務可以**每月免費傳送2,5000封**,這是完全白嫖啊,感興趣的,趕緊動起你的小手爪,噼裡啪啦搞起來呀。 # 2. 建立 SendGrid 賬號 *你要有一個Azure賬號,沒有的話,花幾分鐘自行註冊一個就好。(我的賬號註冊在香港區域)* 咱們先來建立一個**SendGrid Accounts**,如下圖所示。點選SendGrid Accounts後,再點選建立SendGrid account。 ![SendGrid Accounts](https://upload-images.jianshu.io/upload_images/2799767-48afba14c71a05c2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ![image.png](https://upload-images.jianshu.io/upload_images/2799767-83453108dc39e87f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 填寫完畢後,點選Review+Create,稍等片刻,提示部署成功,那麼恭喜你,可以接著往下玩耍了。如果部署失敗,可能會因為SendGrid遮蔽了某些區域的賬號建立,就只能重新註冊個Azure賬號玩耍了。 緊接著,前往剛剛建立的SendGrid Account,點選Manage會跳轉至SendGrid管理面板。 ![SendGrid Account](https://upload-images.jianshu.io/upload_images/2799767-8ff7849d28bd0cee.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 開啟後,會要求你進去郵件驗證,自行前往郵箱驗證即可。 ![SendGrid Dashboard](https://upload-images.jianshu.io/upload_images/2799767-cd231fc9c9e1a91c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 點選API Keys,然後點選Create API Key,填寫API Key Name,選擇 Full Access,點選Create&View,記下生成的API Key,後面需要用到。 ![建立ApiKey](https://upload-images.jianshu.io/upload_images/2799767-19e799cbfe57546a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) # 3. 建立第一個函式應用 回到Azure控制檯,然後搜尋**函式應用**。 ![搜尋函式應用](https://upload-images.jianshu.io/upload_images/2799767-0baff2aa7153f3e3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 開啟後點擊新增,按以下圖示進行建立。其中務必選擇以程式碼釋出,承載的作業系統選擇Windows。 ![Create Azure Function](https://upload-images.jianshu.io/upload_images/2799767-8ca4cc1a0e8c637f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 建立成功後,轉到資源,如下圖所示: ![Azure Function](https://upload-images.jianshu.io/upload_images/2799767-c725525dd929a9a5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 依次點選函式,新增,選擇HTTP trigger模板,填寫函式名稱,然後指定身份驗證級別。 ![Create HTTP trigger](https://upload-images.jianshu.io/upload_images/2799767-965ad86a3747bae3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 點選建立,建立成功後,跳轉到函式頁面,點選獲取函式URL,貼上URL到瀏覽器就可以訪問到你建立的第一個函式應用。 ![First Httptrigger Function](https://upload-images.jianshu.io/upload_images/2799767-182870212f9d7667.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 點選程式碼+測試,就可以看到模板程式碼,如下圖所示: ![Httptrigger 模板程式碼](https://upload-images.jianshu.io/upload_images/2799767-0207fff5a0b8b049.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 從截圖來看,這個和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 應用服務,然後按下圖新增上面發郵件函式需要的配置項,如下所示。 ![新增配置項](https://upload-images.jianshu.io/upload_images/2799767-2e75613d39c9277e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 新增完畢後,再回到函式中就可以測試運行了,如下圖所示: ![](https://upload-images.jianshu.io/upload_images/2799767-8226414351eae530.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 查收郵件,你將收到來自Azure Function & SendGrid 的免費問候。 ![查收郵件](https://upload-images.jianshu.io/upload_images/2799767-cf4dc9e150c3c981.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 當然,也可以通過Postman自行驗證: ![image.png](https://upload-images.jianshu.io/upload_images/2799767-f4f04ec45f023c3f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) # 4.最後 通過以上的連環操作,相信你不僅成功薅了一把微軟的羊毛,而且順帶對**Serverless**也有了一定的認知。 如果對Azure Function感興趣的,不妨參考[官方文件](https://docs.microsoft.com/en-us/azure/azure-functions/)研究一番,相信你會發掘不少玩法,順便再薅它幾把羊毛,哈哈哈!