Qwen3.7-Max
在 ASP.NET (C#) 中通过 QQ 邮箱服务器发送纯文本邮件,主要使用 System.Net.Mail 命名空间。
⚠️ 核心注意事项:QQ 邮箱不允许直接使用登录密码进行 SMTP 认证,必须使用授权码。
1. 获取 QQ 邮箱授权码
登录 QQ邮箱网页版
进入 设置 → 账户
找到 POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务
开启 IMAP/SMTP服务(如未开启)
按提示用手机发短信验证,获取 16位授权码(妥善保存)
2. QQ 邮箱 SMTP 服务器参数
表格
参数 值
SMTP 服务器 smtp.qq.com
端口 587(推荐,STARTTLS)或 465(SSL)
加密方式 STARTTLS (587) / SSL (465)
用户名 完整QQ邮箱地址
密码 授权码(非登录密码)
3. C# 代码示例
方式一:传统 System.Net.Mail(.NET Framework / .NET Core 均可)
csharp
编辑
using System.Net;
using System.Net.Mail;
public void SendTextEmail()
{
var fromAddress = "your_qq@qq.com";
var toAddress = "recipient@example.com";
var authorizationCode = "your_16_char_auth_code"; // ⚠️ 授权码,不是密码
var smtpClient = new SmtpClient("smtp.qq.com", 587)
{
EnableSsl = true, // 587端口用STARTTLS
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(fromAddress, authorizationCode),
Timeout = 30000 // 超时30秒
};
var mailMessage = new MailMessage
{
From = new MailAddress(fromAddress),
Subject = "测试邮件",
Body = "这是一封纯文本邮件内容。\n支持换行符。",
IsBodyHtml = false // ✅ 关键:设为false表示纯文本
};
mailMessage.To.Add(toAddress);
try
{
smtpClient.Send(mailMessage);
Console.WriteLine("邮件发送成功!");
}
catch (SmtpException ex)
{
Console.WriteLine($"发送失败: {ex.StatusCode} - {ex.Message}");
}
}
方式二:MailKit(推荐用于 .NET Core / .NET 5+)
System.Net.Mail 在微软官方文档中已标记为不推荐用于新项目,建议使用 MailKit。
bash
编辑
dotnet add package MailKit
csharp
编辑
using MailKit.Net.Smtp;
using MailKit.Security;
using MimeKit;
public async Task SendTextEmailAsync()
{
var message = new MimeMessage();
message.From.Add(new MailboxAddress("发件人姓名", "your_qq@qq.com"));
message.To.Add(new MailboxAddress("收件人姓名", "recipient@example.com"));
message.Subject = "测试邮件";
// ✅ 纯文本正文
message.Body = new TextPart("plain")
{
Text = "这是一封纯文本邮件内容。\n支持换行符。"
};
using var client = new SmtpClient();
await client.ConnectAsync("smtp.qq.com", 587, SecureSocketOptions.StartTls);
await client.AuthenticateAsync("your_qq@qq.com", "your_16_char_auth_code");
await client.SendAsync(message);
await client.DisconnectAsync(true);
}
4. 安全最佳实践
❌ 不要硬编码授权码,应使用配置管理:
json
编辑
// appsettings.json
{
"EmailSettings": {
"SmtpServer": "smtp.qq.com",
"Port": 587,
"SenderEmail": "your_qq@qq.com",
"AuthorizationCode": "从环境变量或密钥管理服务读取"
}
}
生产环境建议将授权码存入 Azure Key Vault / AWS Secrets Manager / 环境变量 等安全存储中。
5. 常见问题排查
表格
错误 原因 解决方案
Authentication failed 使用了登录密码而非授权码 更换为16位授权码
Connection refused 端口/加密方式不匹配 587+STARTTLS 或 465+SSL
Too many connections QQ邮箱频率限制 单IP每分钟约20封,加间隔
Mail rejected 被判定为垃圾邮件 检查内容、添加正确发件人名称
超时 网络/防火墙问题 确认服务器出站587/465端口开放
💡 提示:QQ邮箱对免费账户有每日发送量限制(通常约50-200封/天),如需大量发送请考虑企业邮箱或专业邮件服务商。
|