Azure : 通過 SendGrid 發送郵件


SendGrid 是什么?

SendGrid 是架構在雲端的電子郵件服務,它能提供基於事務的可靠的電子郵件傳遞。並且具有可擴充性和實時分析的能力。常見的用例有:
1. 自動回復用戶的郵件
2. 定期發送信息給用戶
3. 生成報表等

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM