用途
该技能用于在本地测试邮件发送,配合 Mailpit 与 .NET Aspire 使用。Mailpit 会捕获所有 SMTP 流量而不投递邮件,并提供 Web UI 查看捕获的邮件、暴露 API 供程序化访问,支持 HTML 渲染、邮件头和附件。适用于在本地测试邮件投递、在 .NET Aspire 中搭建邮件基础设施、编写验证邮件发送的集成测试,以及调试邮件渲染与邮件头。
相关技能:aspnetcore/mjml-email-templates(MJML 模板编写)、testing/verify-email-snapshots(渲染 HTML 的快照测试)、aspire/integration-testing(通用 Aspire 测试模式)。
主要能力
- 通过 Aspire AppHost 以容器方式运行 Mailpit,暴露 UI(8025)与 SMTP(1025)端点。
- 支持 SMTP 配置(主机、端口、SSL、发件人地址与名称,及可选用户名/密码)。
- 提供 IEmailSender 接口及基于 MailKit 的 SmtpEmailSender 实现。
- 提供 Mailpit API 客户端封装:获取消息、清空消息、按条件等待消息。
- 提供 Aspire 集成测试夹具,可从 Aspire 获取 Mailpit URL 并创建 API 客户端。
- 支持区分开发与生产环境的邮件发送器注册。
- 提供排障指引(邮件未出现、连接被拒、Aspire 端点未解析)。
使用方式
- 在 AppHost/Program.cs 中添加 Mailpit 容器,并让 API 项目引用其 SMTP 端点,同时设置 Smtp__Host 环境变量。
- 在 appsettings.json 中配置 Smtp 段(主机 localhost、端口 1025、EnableSsl 为 false、发件人地址与名称)。
- 定义 SmtpSettings 配置类并注册:通过 services.Configure<SmtpSettings> 绑定配置,注册 IEmailSender 单例。
- 实现 SmtpEmailSender(使用 MailKit,需执行 dotnet add package MailKit),通过 SmtpClient 连接并按需认证,构造 MimeMessage 发送。
- 访问 http://localhost:8025 查看收件箱、HTML 视图、源代码视图、邮件头与附件;Mailpit UI 端点也会出现在 Aspire 仪表板的 Resources 下。
- 集成测试中通过 AspireFixture 启动应用、获取 Mailpit URL、创建 HttpClient;使用 MailpitClient 清空消息、获取消息或按条件等待消息,并对收件人、主题、HTML 正文进行断言。
适用场景
- 本地开发时不发送真实邮件的邮件投递测试。
- 在 .NET Aspire 中搭建邮件基础设施。
- 编写验证邮件已发送的集成测试。
- 调试邮件渲染与邮件头。
- 验证异步邮件(带超时等待)、批量操作发送多封邮件、邮件内容(如密码重置链接)等测试模式。
限制
- 技能资料主要面向 .NET / Aspire 环境,示例依赖 MailKit 包。
- 生产环境需改用真实 SMTP(如 SendGrid、Postmark 等),并按示例启用 SSL。
- 关于收费、价格、性能指标等事实,资料中暂未提供。