使用FluentEmail在C#中發送電子郵件
在C#中發送交易郵件是許多企業軟體解決方案中的常見需求。 然而,正如Tim Corey在他的影片中所解釋的,使用FluentEmail在C#中發送電子郵件,這個過程並不必然困難。 無論您是想發送簡單的文字訊息、HTML電子郵件,還是處理群發郵件,FluentEmail提供了一種簡便的方法來實現使用現代方式和SMTP協定的電子郵件發送功能。
在本文中,我們將通過Tim Corey的影片來學習如何在C#中使用FluentEmail發送郵件,設置SMTP伺服器,建立動態HTML電子郵件消息,並有效地測試整個發送過程。
FluentEmail簡介
Tim首先解釋了背景:在C#中發送電子郵件過去依賴於較舊的工具如System.Net.Mail,但隨著.NET 5及更高版本的出現,很多已經被棄用。 這就是FluentEmail作為一個現代的電子郵件庫來填補這個空缺的位置,無論是簡單的資訊還是像HTML電子郵件和內嵌圖片這樣的複雜通信。
Tim指出目標是簡單地建立電子郵件,使用模板,甚至在不連接到生產伺服器的情況下進行測試。
設置控制台應用程式
在1:04,Tim建立了一個新的名為EmailDemoApp的控制台應用程式。他強調了使用static void Main(string[] args)或僅使用public static void Main時,不需要UI的簡單性。 這個乾淨的起點允許專注於電子郵件發送過程。

建立應用程式後,Tim將專案設置為目標.NET 5,這是從傳統.NET Framework升級到現代技術的做法,確保更好的電子郵件客戶端協議相容性。
通過套件管理器控制台安裝FluentEmail
接下來,在3:50,Tim使用套件管理器控制台來安裝FluentEmail.Smtp套件,這使得能夠使用SMTP客戶端在C#中發送電子郵件。 Tim還提到有MailGun和SendGrid等附加整合,但SMTP是最通用的選擇,可在大多數電子郵件客戶端和設置中工作。

使用以下命令,您可以手動安裝:
Install-Package FluentEmail.SmtpInstall-Package FluentEmail.SmtpTim確保我們還新增了FluentEmail.Core依賴關係,這是程式庫正常運作所必需的。
配置SMTP客戶端和伺服器
到6:10,Tim討論了使用新的SmtpClient配置來設置SMTP客戶端:
var sender = new SmtpSender(() => new SmtpClient("localhost")
{
EnableSsl = false,
DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory,
PickupDirectoryLocation = @"C:\Demos"
});var sender = new SmtpSender(() => new SmtpClient("localhost")
{
EnableSsl = false,
DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory,
PickupDirectoryLocation = @"C:\Demos"
});Tim強調此SMTP伺服器localhost用於本地測試。 在生產環境中,您會連接到您的真實SMTP伺服器,如Gmail的SMTP端點,可能會使用應用程式密碼以增強安全性。
他強調敏感設置應該移到像appsettings.json一樣的配置文件中,以提高安全性和靈活性。
發送簡單電子郵件訊息
在11:59,Tim轉向使用FluentEmail的電子郵件API發送簡單的消息。 他解釋說,使用以下程式碼範例建立了一個var email物件:
var email = await Email
.From("tim@timco.com")
.To("test@test.com", "Sue")
.Subject("Thanks")
.Body("Thanks for buying our product.")
.SendAsync();var email = await Email
.From("tim@timco.com")
.To("test@test.com", "Sue")
.Subject("Thanks")
.Body("Thanks for buying our product.")
.SendAsync();這樣,您可以通過方法鏈清楚地指定字串主題、字串電子郵件和消息主體。 var message(電子郵件)保存結果,允許進行錯誤檢查。
Tim指出,儘管電子郵件似乎來自tim@timco.com,但SMTP伺服器仍將基於登錄憑據進行認證(例如Gmail應用密碼)。
使用本地目錄查看電子郵件
一旦電子郵件消息被送出,Tim展示了它在本地資料夾中顯示為.eml文件的效果。 雖然可以用Outlook或記事本打開,但對於現有的電子郵件消息或批量測試來說,這並不是最友好的。

使用Papercut SMTP以便於測試
在17:03,Tim將儲存目錄的方法切換到使用Papercut SMTP,一個輕量級的假SMTP伺服器。
他修改了SMTP客戶端設置:
DeliveryMethod = SmtpDeliveryMethod.Network;
Port = 25;DeliveryMethod = SmtpDeliveryMethod.Network;
Port = 25;使用Papercut,每封測試電子郵件會立即出現在GUI中。 這使得檢查純文字和HTML內容更容易,並模擬真實的電子郵件客戶端如何呈現不同的格式。

使用Razor模板構建HTML電子郵件
在19:12,Tim指出靜態純文字不足以處理許多現實案例。 對於更動態的豐富HTML消息,他安裝了FluentEmail.Razor套件:
Install-Package FluentEmail.RazorInstall-Package FluentEmail.Razor他用以下方法更新專案設置:
<PreserveCompilationContext>true</PreserveCompilationContext><PreserveCompilationContext>true</PreserveCompilationContext>以確保Razor模板正確編譯。
建立並使用Razor電子郵件模板
使用字串構建器(var builder)和Razor語法,Tim建立了一個動態電子郵件模板:
var builder = new StringBuilder();
builder.AppendLine("Dear @Model.FirstName,");
builder.AppendLine("<p>Thanks for purchasing @Model.ProductName.</p>");
builder.AppendLine("The TimCo Team");var builder = new StringBuilder();
builder.AppendLine("Dear @Model.FirstName,");
builder.AppendLine("<p>Thanks for purchasing @Model.ProductName.</p>");
builder.AppendLine("The TimCo Team");然後他將此模板附加到var request中,使用以下程式碼:
await Email
.UsingTemplate(builder.ToString(), new { FirstName = "Tim", ProductName = "Bacon Wrapped Bacon" })
.SendAsync();await Email
.UsingTemplate(builder.ToString(), new { FirstName = "Tim", ProductName = "Bacon Wrapped Bacon" })
.SendAsync();這種技術支持不同格式,如根據模板內容的純文字和HTML主體。
處理多個收件人和附件
雖然Tim的演示中沒有完全詳細說明,但FluentEmail可以通過調用.To()來輕鬆支持多個收件人,並為文件附件新增附件物件,類似於舊的.NET中的MailMessage物件或MailMessage類。
您可以使用新字串文件路徑或為內嵌圖片的內容ID建立附件。
在電子郵件發送過程中處理例外
Tim建議您應優雅地處理錯誤。 例如:
try
{
var result = await Email.SendAsync();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}try
{
var result = await Email.SendAsync();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}這可以捕捉電子郵件發送過程中的任何SMTP或網路相關故障,特別是在出現SMTP協定問題時。
總結和最後的思考
大約在27:56,Tim總結道,使用FluentEmail在C#中發送電子郵件變得簡單明了——從發送hello world風格的簡單消息到專業的動態HTML電子郵件。
他還強調使用像appsettings.json這樣的配置文件保持SMTP伺服器詳細資訊和配置的靈活性的重要性,特別是在本地開發和像Azure Portal這樣的雲平台之間進行切換時。
無論您是想單獨發送郵件還是批量發送電子郵件,FluentEmail與Papercut SMTP結合提供了一種現代、高效的工作流程,與許多程式語言和生態系統相容。
最後的思考
感謝Tim Corey的

