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

C#控制台应用中使用SMTP发送邮件失败求助

使用C# SMTP发送Gmail邮件时抛出"Failure sending mail"异常的排查与解决

问题描述

我正在学习用C#通过SMTP发送基础邮件,代码如下:

Console.WriteLine("Sending email..");
const string fromEmail = "abc@gmail.com";
const string pswd = "password";
MailMessage message = new MailMessage();
SmtpClient smtp = new SmtpClient();

message.From = new MailAddress(fromEmail);
message.To.Add(new MailAddress("abc@gmail.com"));
message.Subject = "Email Testing";
message.Body = "This is email testing. It is working as expected. Thanks";
message.IsBodyHtml = false;
smtp.Port = 587;
smtp.Host = "smtp.gmail.com";
smtp.EnableSsl = true;
smtp.UseDefaultCredentials = false;
smtp.Credentials = new NetworkCredential(fromEmail, pswd);
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.Send(message);

Console.WriteLine("Email sent successfully");

运行时抛出异常:

Failure sending mail.
   at System.Net.Mail.SmtpClient.Send(MailMessage message)
   at EmailDemo.Program.Main(String[] args)

异常出现在smtp.Send()方法处,无法明确具体原因。已确认发件邮箱和应用密码正确,仅发件人与收件人邮箱相同,怀疑是否缺少某些配置,寻求帮助。

排查与解决办法

  • 捕获内部异常获取详细错误信息
    当前异常仅显示外层提示,需捕获SmtpException并查看InnerException,它会给出更具体的错误原因(比如认证失败、服务器拒绝、安全拦截等)。修改代码添加异常捕获:

    try
    {
        smtp.Send(message);
        Console.WriteLine("Email sent successfully");
    }
    catch (SmtpException ex)
    {
        Console.WriteLine($"SMTP错误:{ex.Message}");
        if (ex.InnerException != null)
        {
            Console.WriteLine($"内部错误:{ex.InnerException.Message}");
        }
    }
    
  • 检查Gmail账号的SMTP权限配置
    即便使用了应用密码,仍需确认:

    • 账号已开启两步验证(应用密码仅对开启两步验证的Google账号有效)
    • 登录Google账号安全中心,查看是否有SMTP登录的安全拦截通知,若有需手动允许该设备的访问
    • 确保账号没有触发Google的异常检测限制(比如近期异地登录、频繁发送邮件等)
  • 确认SmtpClient配置顺序
    UseDefaultCredentials必须在设置Credentials之前赋值,否则会导致认证参数失效。你的代码顺序正确,但后续修改需保持这个逻辑:

    smtp.UseDefaultCredentials = false;
    smtp.Credentials = new NetworkCredential(fromEmail, pswd);
    
  • 尝试切换SMTP端口
    Gmail支持587(STARTTLS)和465(SSL直连)两个端口,若当前587端口连接失败,可尝试改用465端口:

    smtp.Port = 465;
    smtp.EnableSsl = true;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:15:14