IRONSOFTWAREHOME

using FluentEmail 用 C# 发送电子邮件

使用 FluentEmail 在 C# 中发送电子邮件

Tim Corey

30m 36s

用 C# 发送事务性电子邮件是许多企业软件解决方案的共同需求。 不过,正如 Tim Corey 在他的视频"Sending Email in C# using FluentEmail"中所解释的那样,这个过程并不困难。 无论您是想发送简单的文本消息、HTML电子邮件,还是处理批量电子邮件,FluentEmail都提供了一种简单的方法来使用现代方法和SMTP协议实现电子邮件发送功能。

在本文中,我们将按照 Tim Corey 的视频进行讲解,全面学习如何使用 C# 使用 FluentEmail 发送电子邮件、设置 SMTP 服务器、构建动态 HTML 电子邮件信息,并有效测试整个电子邮件发送过程。

FluentEmail 简介

蒂姆首先解释了背景情况:用 C# 发送电子邮件曾经依赖于 System.Net.Mail 等较老的工具,但随着 .NET 5 及更高版本的推出,其中大部分工具已被弃用。 这就是现代电子邮件库 FluentEmail 的用武之地,它既能处理简单的邮件,也能处理 HTML 电子邮件和内嵌图片等更复杂的通信。

Tim 指出,我们的目标是在不连接生产服务器的情况下轻松创建电子邮件、使用模板甚至测试它们。

设置控制台应用程序

1:04 时,Tim 创建了一个名为 EmailDemoApp 的新控制台应用程序。他强调了使用 static void Main(string[] args) 或在不需要用户界面时使用 public static void Main 的简便性。 简洁的起点可以让我们只关注电子邮件的发送过程。

创建应用程序后,Tim 将项目设置为以 .NET 5 为目标,这是传统 .NET Framework 的现代升级版,可确保更好地兼容电子邮件客户端的现代协议。

通过软件包管理器控制台安装 FluentEmail

接下来,在3:50,Tim使用包管理器控制台安装包FluentEmail.Smtp,启用使用SMTP客户端在C#中发送电子邮件。 此外,Tim 还提到了 MailGun 和 SendGrid 等其他集成,但 SMTP 是最通用的选择,可以在大多数电子邮件客户端和设置中使用。

您可以使用以下命令手动安装:

Install-Package FluentEmail.Smtp
SHELL

Tim 确保我们也添加了 FluentEmail.Core 的依赖关系,这对于库的运行是必不可少的。

配置 SMTP 客户端和服务器

到6:10,Tim讨论了使用新的SmtpClient配置设置SMTP客户端:

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 消息(电子邮件)保存结果,以便进行错误检查。

Tim指出,虽然电子邮件看似来自tim@timco.com,但SMTP服务器仍会根据登录凭据(如Gmail应用程序密码)进行身份验证。

使用本地目录查看电子邮件

邮件发送完毕后,Tim 将展示邮件如何以 .eml 文件的形式出现在本地文件夹中。 虽然您可以用 Outlook 或记事本打开它,但对于现有的电子邮件信息或批量测试,它并不是最方便用户使用的。

使用剪纸 SMTP 简化测试

17:03 时,Tim 从保存到目录切换到使用轻量级假冒 SMTP 服务器 Papercut SMTP。

他修改SMTP客户端设置为:

DeliveryMethod = SmtpDeliveryMethod.Network;
Port = 25;

有了 Papercut,每封测试邮件都会立即显示在图形用户界面上。 这使得检查纯文本和 HTML 正文内容变得更加容易,并模拟了真实的电子邮件客户端如何呈现不同的格式。

使用 Razor 模板创建 HTML 电子邮件

在 19:12 分,Tim 指出静态的纯文本不足以应对现实世界中的许多情况。 为了获得更动态、更丰富的 HTML 邮件,他安装了 FluentEmail.Razor 软件包:

Install-Package FluentEmail.Razor
SHELL

他通过以下方式更新项目设置:

<PreserveCompilationContext>true</PreserveCompilationContext>

确保 Razor 模板编译正确。

创建和使用 Razor 电子邮件模板

使用字符串生成器(var 生成器)和 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 请求中:

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);
}

这捕捉到在发送电子邮件过程中可能出现的任何 SMTP 或网络相关的故障,特别是在出现 SMTP 协议问题时。

摘要和最终想法

在大约 27:56 处,Tim 得出结论,通过 FluentEmail,用 C# 发送电子邮件变得简单——从发送 hello world 风格的简单消息到专业、动态的 HTML 电子邮件。

他还强调了使用像 appsettings.json 这样的配置文件保持 SMTP 服务器详细信息和配置的灵活性的重要性,特别是在本地开发和像 Azure 门户这样的云平台之间移动时。

无论您是要单独发送邮件还是批量发送邮件,FluentEmail 与 Papercut SMTP 的结合都能提供一个与多种编程语言和生态系统兼容的现代、高效的工作流程。

最终想法

感谢 Tim Corey 的优秀视频,很明显现代 C# 的电子邮件发送功能已经超越了基本的 SmtpClient 类和 MailMessage 类的处理。 在 FluentEmail 的帮助下,开发人员可以快速创建新项目、配置 SMTP 连接、构建动态电子邮件正文,并在部署到生产环境之前在本地测试一切。

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

OR
bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户