You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#控制台程序发送邮件遇SmtpException异常求助

问题排查与解决方案

一、常见问题排查点

1. 网络连通性问题

  • 测试本地是否能访问Gmail的SMTP服务器:
    • 打开命令提示符,执行 telnet smtp.gmail.com 587,能连通会进入空白界面;若提示无法连接,说明网络被防火墙/代理拦截,需联系管理员开放587端口的出站流量
    • 或用PowerShell命令 Test-NetConnection smtp.gmail.com -Port 587 检查端口连通性

2. Gmail账户权限配置

  • 必须启用两步验证:登录Google账户,在"安全"选项中开启两步验证
  • 创建应用专用密码:两步验证开启后,在安全设置里找到"应用专用密码",生成用于SMTP验证的密码,代码中的fromPassword需使用该生成密码,不能用原账户密码
  • 注:Google已逐步移除"低安全性应用访问"选项,优先使用应用专用密码

3. SmtpClient配置顺序错误

  • 必须先设置 UseDefaultCredentials = false,再设置Credentials,否则默认凭据会覆盖自定义账户信息,导致认证失败

二、修正后的完整实现代码

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

class Program
{
    static void Main(string[] args)
    {
        var fromAddress = new MailAddress("your-gmail-address@gmail.com", "发送者名称");
        var toAddress = new MailAddress("recipient@example.com", "接收者名称");
        const string fromPassword = "你的应用专用密码"; // 此处替换为生成的应用专用密码
        const string subject = "测试报告邮件";
        const string body = "这是控制台程序发送的测试报告内容";

        using (var smtp = new SmtpClient
        {
            Host = "smtp.gmail.com",
            Port = 587,
            EnableSsl = true,
            DeliveryMethod = SmtpDeliveryMethod.Network,
            UseDefaultCredentials = false, // 先禁用默认凭据
            Credentials = new NetworkCredential(fromAddress.Address, fromPassword),
            Timeout = 10000 // 设置超时时间,避免无限等待
        })
        using (var message = new MailMessage(fromAddress, toAddress)
        {
            Subject = subject,
            Body = body
        })
        {
            try
            {
                smtp.Send(message);
                Console.WriteLine("邮件发送成功");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"发送失败:{ex.Message}");
                if (ex.InnerException != null)
                {
                    Console.WriteLine($"内部异常:{ex.InnerException.Message}");
                }
            }
        }
    }
}

额外注意事项

  • 公司内网环境下可能需要配置代理服务器,可在SmtpClient中设置Proxy属性
  • 确保邮件内容符合Gmail反垃圾邮件规则,避免被直接拦截
  • 可将同步的Send调用改为异步SendMailAsync,避免阻塞主线程

内容的提问来源于stack exchange,提问作者merlin savarimuthu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 20:40:10