本文介绍如何使用 Aspire MailPit 托管集成。 该 CommunityToolkit.Aspire.Hosting.MailPit 库用于在分布式应用程序中注册 MailPit 容器。
MailPit 是一种邮件测试工具,提供用于开发和测试的假 SMTP 服务器。 它提供了一个 Web 界面,可在其中查看和管理捕获的电子邮件,使其成为在应用程序中测试电子邮件功能的理想方法。
托管集成
MailPit 托管集成将 MailPit 建模为 MailPitResource 类型。 若要访问此资源和用于将其添加到应用模型的扩展方法,请在 📦 项目中添加 Aspire CommunityToolkit.Hosting.MailPit NuGet 包。
dotnet add package CommunityToolkit.Aspire.Hosting.MailPit
在应用主机项目中,使用 AddMailPit 扩展方法注册 MailPit 资源:
var builder = DistributedApplication.CreateBuilder(args);
var mailpit = builder.AddMailPit("mailpit");
builder.AddProject<Projects.ExampleProject>()
.WithReference(mailpit);
builder.Build().Run();
该方法 AddMailPit 将 MailPit 资源添加到应用程序模型。 资源配置为使用默认 MailPit 映像和端口。
添加 MailPit 资源时,会公开以下服务:
| 服务 | 方案 | 港口 |
|---|---|---|
| SMTP | smtp |
1025 |
| 网页用户界面 | http |
8025 |
应用程序可以使用 SMTP 服务发送电子邮件以进行测试,而 Web UI 提供用于查看捕获的电子邮件的界面。
数据持久性
默认情况下,MailPit 会将电子邮件存储在内存中,这意味着在停止容器时所有电子邮件都会丢失。 若要在容器重启之间保留电子邮件,可以添加数据卷:
var mailpit = builder.AddMailPit("mailpit")
.WithDataVolume("mailpit-data");
数据卷会持久化 MailPit 数据目录,确保在容器重启时保留电子邮件。
还可以使用绑定挂载将本地目录映射到 MailPit 容器:
var mailpit = builder.AddMailPit("mailpit")
.WithDataBindMount(@"C:\MailPitData");
Client 集成
没有 MailPit 的 Community Toolkit 客户端集成。 而是将任何 SMTP 客户端库与 MailPit 资源提供的连接字符串一起使用。 MailPit 资源提供可用于向 MailPit 服务器发送电子邮件的 SMTP 连接字符串。
连接字符串包括以下信息:
- 主机:MailPit SMTP 服务器的主机名或 IP 地址
- 端口:端口号(通常为 1025)
下面是有关如何在 .NET 应用程序中使用连接字符串的示例:
public class EmailService
{
private readonly IConfiguration _configuration;
public EmailService(IConfiguration configuration)
{
_configuration = configuration;
}
public async Task SendEmailAsync(string to, string subject, string body)
{
var connectionString = _configuration.GetConnectionString("mailpit");
var connectionInfo = ConnectionString.Parse(connectionString);
using var client = new SmtpClient();
await client.ConnectAsync(connectionInfo.Host, connectionInfo.Port, SecureSocketOptions.None);
var message = new MimeMessage();
message.From.Add(new MailboxAddress("Test Sender", "test@example.com"));
message.To.Add(new MailboxAddress("", to));
message.Subject = subject;
message.Body = new TextPart("plain") { Text = body };
await client.SendAsync(message);
await client.DisconnectAsync(true);
}
}
此示例使用 MailKit 库通过 MailPit SMTP 服务器发送电子邮件。