MailKit for C# (.NET): 完整指南与示例
\n\n1. 什么是 MailKit 及其用途
\n\nMailKit 是一个功能强大、跨平台的开源库,用于在 .NET 生态系统中处理电子邮件。它提供了一套完整的工具,用于创建、发送、接收和处理电子邮件消息。与过时的 System.Net.Mail 不同,MailKit 提供了现代化的 API,完全支持 MIME(多用途互联网邮件扩展)、S/MIME 和 OpenPGP,以及异步操作,这对于高负载应用程序至关重要。
为什么需要 MailKit?如果您使用 C# 开发,并且需要发送带附件的电子邮件、解析传入邮件、处理不同的邮件协议(SMTP、POP3、IMAP)或处理复杂的邮件格式(HTML、附件、签名),那么 MailKit 将成为您不可或缺的工具。它已被数千家公司用于生产环境,包括 Microsoft(在某些内部服务中),并支持 .NET Framework、.NET Core、.NET 5+ 甚至 Xamarin/MAUI。
\n\nMailKit 相对于同类产品的主要优势:完全支持最新的电子邮件标准(RFC 2045-2049、RFC 2822、RFC 5322)、内置 SSL/TLS 支持、代理支持、大附件的流式处理以及通过使用 System.IO.Pipelines 和 async/await 实现的高性能。
2. 安装
\n\nMailKit 通过 NuGet 包管理器安装。在包管理器控制台(Package Manager Console)或 .NET CLI 终端中执行以下任一命令:
\n\n// 通过 .NET CLI\ndotnet add package MailKit\n\n// 通过 Package Manager Console\nInstall-Package MailKit\n\n// 或者通过 Visual Studio 中的 NuGet Package Manager\n// 搜索 "MailKit" 并安装最新的稳定版本\n\n安装后,项目将添加对 MimeKit(用于处理 MIME 消息的基础库)的依赖——它会作为传递依赖自动安装。
3. 快速入门——最小工作示例
\n\n以下是通过 Gmail SMTP 服务器发送简单文本电子邮件的最小示例。请注意:使用 Gmail 需要使用应用密码(App Password)或 OAuth 2.0。
\n\nusing MailKit.Net.Smtp;\nusing MimeKit;\n\n// 创建消息\nvar message = new MimeMessage();\nmessage.From.Add(new MailboxAddress("发件人", "sender@gmail.com"));\nmessage.To.Add(new MailboxAddress("收件人", "recipient@example.com"));\nmessage.Subject = "来自 MailKit 的测试邮件";\nmessage.Body = new TextPart("plain") { Text = "你好!这是一条测试消息。" };\n\n// 通过 SMTP 发送\nusing (var client = new SmtpClient())\n{\n client.Connect("smtp.gmail.com", 587, SecureSocketOptions.StartTls);\n client.Authenticate("sender@gmail.com", "your-app-password");\n client.Send(message);\n client.Disconnect(true);\n}\n\nConsole.WriteLine("邮件已发送!");\n\n4. 主要方法/函数/类
\n\n4.1. SmtpClient.Connect()
\n签名: Task ConnectAsync(string host, int port, SecureSocketOptions options, CancellationToken cancellationToken = default)
功能: 建立与 SMTP 服务器的连接。参数 SecureSocketOptions 定义加密类型:None、Auto、SslOnConnect、StartTls。
using var client = new SmtpClient();\nawait client.ConnectAsync("smtp.mail.ru", 465, SecureSocketOptions.SslOnConnect);\n\n4.2. SmtpClient.Authenticate()
\n签名: Task AuthenticateAsync(string user