Aspire MailPit 托管集成

本文介绍如何使用 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 服务器发送电子邮件。

另请参阅