跳過到頁腳內容
Iron Academy Logo
學習 C#
學習 C#

其他分類

在 C# 使用 FluentEmail 發送電子郵件

Tim Corey
30m 36s

在C#中發送事務性電子郵件是許多企業軟體解決方案中的常見需求。 正如Tim Corey在他的影片中所解釋的,"在C#中使用FluentEmail發送電子郵件",這個過程不必很困難。 無論您想發送簡單的文字訊息、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。 這個乾淨的起始點允許專注於電子郵件發送過程。

Send Emails In Csharp Using Fluentemail 1 related to 設置控制台應用程式

在創建應用程式後,Tim將專案設定為目標.NET 5,這是從傳統.NET Framework的一個現代升級,確保了與現代協議更好的相容性,適用於電子郵件用戶端。

通過套件管理器控制台安裝FluentEmail

接下來,在3:50,Tim使用套件管理器控制台安裝了FluentEmail.Smtp套件,使C#中的電子郵件發送使用smtp客戶端成為可能。 與此同時,Tim提到還有其他的整合,如MailGun和SendGrid,但SMTP是最通用的選擇,適用於大多數電子郵件用戶端和設置。

Send Emails In Csharp Using Fluentemail 2 related to 通過套件管理器控制台安裝FluentEmail

使用以下命令,您可以手動安裝它:

Install-Package FluentEmail.Smtp
Install-Package FluentEmail.Smtp

Tim確保我們也添加了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電子郵件物件是使用以下代碼示例創建的:

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訊息(電子郵件)保存結果,允許進行錯誤檢查。

Tim指出,儘管電子郵件似乎來自於tim@timco.com,smtp伺服器仍將根據登入憑證(如Gmail應用程式密碼)進行身份驗證。

使用本地目錄查看電子郵件

一旦電子郵件訊息被發送,Tim展示了它如何顯示為本地資料夾中的.eml檔案。 儘管您可以用Outlook或Notepad開啟它,但對於現有的電子郵件訊息或大量測試來說,它不是最用戶友好的。

Send Emails In Csharp Using Fluentemail 3 related to 使用本地目錄查看電子郵件

使用Papercut SMTP進行更簡便的測試

在17:03時,Tim從儲存到目錄切換到使用Papercut SMTP,一個輕量級的虛擬SMTP伺服器。

他修改了smtp客戶端設置為:

DeliveryMethod = SmtpDeliveryMethod.Network;
Port = 25;
DeliveryMethod = SmtpDeliveryMethod.Network;
Port = 25;

使用Papercut,每個測試電子郵件立即顯示在GUI中。 這使得檢查純文字和HTML正文內容變得更容易,並模擬現實中的電子郵件用戶端如何呈現不同的格式。

Send Emails In Csharp Using Fluentemail 4 related to 使用Papercut SMTP進行更簡便的測試

使用Razor模板構建HTML電子郵件

在19:12時,Tim註明靜態純文字對許多真實世界的案例來說並不夠。 為了更動態、豐富的HTML訊息,他安裝了FluentEmail.Razor包:

Install-Package FluentEmail.Razor
Install-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請求中:

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的出色影片,很明顯,C#中的現代電子郵件發送功能已超越了基本的smtpclient類和mailmessage類處理。 在FluentEmail的幫助下,開發者可以快速創建新專案,配置SMTP連接,構建動態電郵內容,並在本地測試所有內容,再部署到生產環境。

Hero Worlddot related to 在 C# 使用 FluentEmail 發送電子郵件
Hero Affiliate related to 在 C# 使用 FluentEmail 發送電子郵件

通過分享您所愛的東西賺得更多

您是否在為使用.NET、C#、Java、Python或Node.js的開發者創建內容?將您的專業知識轉化為額外收入!

鋼鐵支援團隊

我們每週 5 天,每天 24 小時在線上。
聊天
電子郵件
打電話給我