Azure 上通過 SendGrid 發送郵件

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 發送電子郵件。雖然代碼不多,但描述了整個操作過程,希望對朋友們有所幫助。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章