跳至页脚内容
Iron Academy Logo
学习 C#
学习 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 的简便性。 简洁的起点可以让我们只关注电子邮件的发送过程。

Send Emails In Csharp Using Fluentemail 1 related to 设置控制台应用程序

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

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

接下来,在 3:50 处,Tim 使用软件包管理器控制台安装了软件包 FluentEmail.Smtp,从而可以使用 smtp 客户端在 C# 中发送电子邮件。 此外,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 或记事本打开它,但对于现有的电子邮件信息或批量测试,它并不是最方便用户使用的。

Send Emails In Csharp Using Fluentemail 3 related to 使用本地目录查看电子邮件

使用剪纸 SMTP 简化测试

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

他修改了 smtp 客户端设置:

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

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

Send Emails In Csharp Using Fluentemail 4 related to 使用剪纸 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 生成器)和 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 使用 FluentEmail 用 C# 发送电子邮件
Hero Affiliate related to 使用 FluentEmail 用 C# 发送电子邮件

分享您的所爱,赚取更多收入

您为使用 .NET、C#、Java、Python 或 Node.js 的开发人员创建内容吗?将您的专业知识转化为额外收入!

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我