asp.net中如何通过QQ邮件服务器向别人发送纯文本邮件
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封/天),如需大量发送请考虑企业邮箱或专业邮件服务商。

渝公网安备 50011902000225号

渝ICP备18008233号-1