SendGrid 是什么?
SendGrid 是架構在云端的電子郵件服務,它能提供基于事務的可靠的電子郵件傳遞。
并且具有可擴充性和實時分析的能力。常見的用例有:
- 自動回復用戶的郵件
- 定期發送信息給用戶
- 生成報表等
由于使用 SendGrid 這樣的第三方郵件服務既穩定可靠又不用自己維護郵件服務器,并且對于郵件發送量不大的應用,免費發送的郵件數 (每個月25000封)已經可以滿足需求。所以越來越多的應用都開始使用這種郵件服務來發送郵件。
下面我們從 Azure 上創建 SendGrid 賬號開始,介紹如何通過 SendGrid 發送郵件。
創建 SendGrid 賬號
登錄 Azure 的管理網站,點擊 "+"開始創建 SendGrid 賬號。在搜索欄中輸入“SendGrid Email Delivery”并回車:
選擇“SendGrid Email Delivery”進入簡介界面:
在簡介界面中,可以讀到一些基本的信息,當然直接點擊“Create”就可以了!此時進入創建 SendGrid 詳情界面,界面的基本信息我們就不關注了,請直接查看 Pricing tier 中 F1 free 的收費標準,這可是貨真價實的每個月25000封免費郵件。最后點擊“Create”完成創建:
SendGrid 賬號創建完成后,我們查看一下它的 Configurations 信息:
在使用 SendGrid 發送郵件時,需要用到這些信息。首先你會看到用戶名已經被處理過了,在訪問 SendGrid 服務時,我們使用的就是這個被處理過的用戶名稱。還有下面的 SMTP SERVER,也就是說當我們創建了 SendGrid 賬號后,還可以用傳統的方式通過指定的 SMTP 服務器來發送郵件。
在C# 項目中使用 SendGrid
假如我們要在一個 asp.net 的應用中通過 SendGrid 發送郵件。那么在使用 SendGrid 服務之前,我們需要先在該項目中安裝 SendGrid 提供的組件。請在 Visual Studio 的 Package Manager Console 中執行下面的命令:
> Install-Package Sendgrid -Version 6.3.4
注意,SendGrid 的 API 升級很快,我們這里使用的是 V2 版本的 API,所以要指定安裝的版本。
發送測試郵件
萬事俱備,讓我們先發送一封普通的郵件試試:
// 請使用前面介紹的被 SendGrid 處理過的用戶名。
string username = "xxxxx";
string password = "yyyyy";
var credentials = new NetworkCredential(username, password);
var transport = new Web(credentials);
var myMessage = new SendGridMessage();
myMessage.From = new MailAddress("fromaddress");
myMessage.AddTo("toaddress");
myMessage.Subject = "test";
myMessage.Html = "<p>Hello World!</p>";
// 通過異步方法發送郵件。
transport.DeliverAsync(myMessage);
代碼很簡單。需要注意的是,這段代碼在你本地調試時,是無法發送郵件的。你需要把你的應用發布到 Azure 的 Web App 或是 Cloud Service 上才能成功發送郵件。
發送帶附件的郵件
你可以使用 SendGridMessage.AddAttachment 方法,為你的郵件添加附件。這個方法有兩個重載,分別是指定文件路徑和文件流。如果你的程序運行在 Azure上,讀取文件流的用例會多一些。
如果你還需要其它一些功能,請詳細的閱讀 SendGridMessage 類型的 API,它基本上能夠滿足你所有的需求。
已知問題
如果你有一個非常頑固的用戶,他要求你發出的郵件內容必須是純文本的形式 (主要是為了保持手動創建的各種換行和縮進),不能是 HTML 格式的,這將會是一個不小的挑戰。因為 SendGrid 默認把郵件內容包成了 HTML 格式。不過我們還是有方法滿足客戶的,你可以嘗試在每一行文本前面添加一個半角的空格,這也是 SendGrid 官方給出的方法。
其實,還有另外一種方式可以實現類似的效果。那就是把所有的文本內容放到 html 的<pre>元素中,代碼也很簡單:
message.Html = string.Format("<pre>{0}</pre>", System.Web.HttpUtility.HtmlEncode(message.Text));
總結
本文概要的介紹了在 Azure 上的 C# 應用中,如何使用 SendGrid 發送電子郵件。雖然代碼不多,但描述了整個操作過程,希望對朋友們有所幫助。
相關閱讀:
Azure Blob Storage 基本用法 -- Azure Storage 之 Blob
Azure Queue Storage 基本用法 -- Azure Storage 之 Queue
Azure File Storage 基本用法 -- Azure Storage 之 File
Azure Table storage 基本用法 -- Azure Storage 之 Table
文章列表