在ASP.NET中发送邮件主要有两种常用方法:使用 .NET Framework 内置的 System.Net.Mail 命名空间(已过时但可用)或使用更现代的第三方库 MailKit,以下是两种方法的详细说明和代码示例:

方法1:使用 System.Net.Mail(.NET 内置)
适用于 .NET Framework 或兼容环境,但官方已标记为过时(.NET Core 3.0+ 及 .NET 5+ 推荐用 MailKit)。
核心步骤:
- 添加命名空间:
using System.Net; using System.Net.Mail; - 配置 SMTP 客户端 (
SmtpClient) - 创建邮件对象 (
MailMessage) - 发送邮件
示例代码:
public void SendEmail(string to, string subject, string body)
{
try
{
// 发件人邮箱和密码(或应用专用密码)
string from = "sender@example.com";
string password = "your_password"; // 推荐使用配置存储
// 配置 SMTP 客户端
SmtpClient smtpClient = new SmtpClient("smtp.example.com", 587); // 如 smtp.gmail.com
smtpClient.EnableSsl = true; // 启用 SSL/TLS
smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials = new NetworkCredential(from, password);
// 创建邮件
MailMessage mailMessage = new MailMessage();
mailMessage.From = new MailAddress(from);
mailMessage.To.Add(to);
mailMessage.Subject = subject;
mailMessage.Body = body;
mailMessage.IsBodyHtml = true; // 支持 HTML 内容
// 添加附件(可选)
Attachment attachment = new Attachment("C:/file.pdf");
mailMessage.Attachments.Add(attachment);
// 发送邮件
smtpClient.Send(mailMessage);
// 清理资源
attachment.Dispose();
}
catch (Exception ex)
{
// 错误处理
Console.WriteLine($"发送失败: {ex.Message}");
}
}
注意事项:
- 安全性:避免硬编码密码,使用
ConfigurationManager或环境变量存储凭据。 - 端口:常用端口
587(TLS)或465(SSL)。 - 邮箱服务配置:需开启 SMTP 服务(如 Gmail 需启用“安全性较低的应用”或生成应用专用密码)。
- 过时警告:在 .NET Core 3.0+ 中
SmtpClient已被标记为[Obsolete]。
方法2:使用 MailKit(推荐跨平台方案)
适用于所有 .NET 版本(包括 .NET Core/5/6+),更安全、高效且支持异步。

安装 NuGet 包:
Install-Package MailKit Install-Package MimeKit
示例代码:
using MimeKit;
using MailKit.Net.Smtp;
public async Task SendEmailAsync(string to, string subject, string body)
{
try
{
var message = new MimeMessage();
message.From.Add(new MailboxAddress("发件人名称", "sender@example.com"));
message.To.Add(new MailboxAddress("收件人名称", to));
message.Subject = subject;
// 构建邮件内容(支持 HTML + 纯文本)
var bodyBuilder = new BodyBuilder();
bodyBuilder.HtmlBody = body; // HTML 内容
bodyBuilder.TextBody = "请使用支持HTML的邮件客户端查看"; // 纯文本回退
message.Body = bodyBuilder.ToMessageBody();
// 添加附件(可选)
bodyBuilder.Attachments.Add("C:/file.pdf");
using (var client = new SmtpClient())
{
// 连接 SMTP 服务器
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);
}
}
catch (Exception ex)
{
Console.WriteLine($"发送失败: {ex.Message}");
}
}
MailKit 优势:
- 跨平台支持:兼容 .NET Framework/Core/5/6+。
- 异步操作:原生支持
async/await避免阻塞。 - 更安全的协议:支持
SecureSocketOptions(如StartTls)。 - 高级功能:更完善的 MIME 处理、附件、邮件头控制等。
关键配置说明
| 配置项 | 值示例 | 说明 |
|---|---|---|
| SMTP 服务器地址 | smtp.gmail.com |
根据邮箱服务商查询 |
| 端口 | 587 (TLS) / 465 (SSL) |
优先使用 TLS |
| 启用加密 | EnableSsl=true 或 SecureSocketOptions.StartTls |
必需启用加密 |
| 认证凭据 | 邮箱账号 + 密码/应用密码 | Gmail 等需开启“允许不安全应用” |
| 方法 | 适用场景 | 是否推荐新项目 |
|---|---|---|
System.Net.Mail |
旧版 .NET Framework 项目维护 | ❌ 过时 |
| MailKit | 所有新项目(尤其 .NET Core/5/6+) | ✅ 强烈推荐 |
推荐实践:
- 新项目统一使用 MailKit。
- 敏感凭据通过 Azure Key Vault、环境变量 或 AppSettings.json 存储。
- 使用
async/await提升并发性能。
示例配置存储(appsettings.json):
{ "EmailSettings": { "SmtpServer": "smtp.example.com", "Port": 587, "Username": "sender@example.com", "Password": "your_secure_password" } }
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/287678.html

