使用 SmtpClient 和 MailKit 在 C# (.NET) 中发送电子邮件

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在 C# (.NET) 中发送电子邮件:SmtpClient、MailKit 和 MimeKit



发送电子邮件是现代应用程序中的基本任务之一。在 C# (.NET) 生态系统中,既有内置工具(SmtpClient 类),也有强大的第三方库(MailKit 和 MimeKit)。在本指南中,我们将详细分析这两种方法,查看代码示例、SMTP 服务器配置、附件处理和 HTML 邮件编写。



1. 内置 SmtpClient (System.Net.Mail)



SmtpClient 类在 .NET Framework 和 .NET Core/5+(有限制)中可用。它易于使用,但不支持现代协议(例如 OAuth2),并且被认为已过时,不适用于新项目。



2. 安装和引入 MailKit



MailKit 是一个用于处理电子邮件的跨平台库。它完全异步,支持 SSL/TLS、OAuth2、S/MIME 和其他现代功能。通过 NuGet 安装:



dotnet add package MailKitdotnet add package MimeKit


或者通过包管理器控制台:



Install-Package MailKitInstall-Package MimeKit


3. 使用 SmtpClient 发送简单邮件的示例



使用内置 SmtpClient 的基本示例:



using System.Net;using System.Net.Mail;

public void SendSimpleEmail(){ var fromAddress = new MailAddress("sender@example.com", "发件人"); var toAddress = new MailAddress("recipient@example.com", "收件人"); const string fromPassword = "your_password"; const string subject = "邮件主题"; const string body = "邮件正文";

var smtp = new SmtpClient { Host = "smtp.example.com", Port = 587, EnableSsl = true, DeliveryMethod = SmtpDeliveryMethod.Network, UseDefaultCredentials = false, Credentials = new NetworkCredential(fromAddress.Address, fromPassword) };

using (var message = new MailMessage(fromAddress, toAddress) { Subject = subject, Body = body }) { smtp.Send(message); }}


重要提示: 对于 Gmail、Yandex 和其他服务,必须使用应用密码或 OAuth2。



4. 使用 MailKit 发送电子邮件(推荐方式)



MailKit 提供了更灵活、更现代的 API。发送简单文本邮件的示例:



using MailKit.Net.Smtp;using MailKit.Security;using MimeKit;using System.Threading.Tasks;

public async Task SendEmailWithMailKitAsync(){ var message = new MimeMessage(); message.From.Add(new MailboxAddress("发件人", "sender@example.com")); message.To.Add(new MailboxAddress("收件人", "recipient@example.com")); message.Subject = "邮件主题"; message.Body = new TextPart("plain") { Text = "邮件正文" };

using (var client = new SmtpClient()) { await client.ConnectAsync("smtp.example.com", 587, SecureSocketOptions.StartTls); await client.AuthenticateAsync("sender@example.com", "your_password"); await client.SendAsync(message); await client.DisconnectAsync(true); }}


5. 发送带附件的 HTML 邮件



使用 MimeKit 创建多部分邮件(HTML + 附件):



public async Task SendHtmlEmailWithAttachmentAsync(){    var message = new MimeMessage();    message.From.Add(new MailboxAddress("发件人", "sender@example.com"));    message.To.Add(new MailboxAddress("收件人", "recipient@example.com"));    message.Subject = "带附件的 HTML 邮件";

var bodyBuilder = new BodyBuilder { HtmlBody = @"<h1>你好!</h1><p>这是一封带附件的 HTML 邮件。</p>", TextBody = "这是文本

推荐