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

C#调用Gmail SMTP发邮件报5.7.0认证错误如何解决

报错原因

你遇到的5.7.0 Authentication Required报错和基础SMTP参数配置无关,核心是Gmail的安全机制拦截了认证请求,常见触发原因:

  • 2022年5月起Gmail正式下线了「低安全性应用访问」功能,不再支持直接使用Gmail账号的登录密码通过SMTP发信
  • 开启了两步验证(2FA)的Gmail账号,本身就不支持直接用账号密码做第三方应用的SMTP认证凭据
  • SmtpClient默认会优先使用当前系统的默认网络凭据,没有显式关闭该配置时,手动传入的账号密码会被覆盖
  • 首次在新IP/新设备调用Gmail SMTP时,会触发账号安全风控,直接拦截未授信的发信请求
修复方案

按以下步骤操作即可解决:

  1. 为发件Gmail账号开启两步验证,该操作是生成应用专用密码的前置条件,未开启2FA的账号无法生成对应凭据。
  2. 进入Gmail账号的安全设置页,找到「应用专用密码」配置项,应用类型选择“邮件”,设备选择当前开发所用设备,生成16位长度的应用专用密码,替换代码中原先填写的Gmail账号登录密码,填入时不要带生成密码时显示的分隔空格。
  3. 修正代码配置,补充缺失的凭据配置项,注意配置顺序:
    string fromAddress = "xy@gmail.com";
    string fromPassword = "替换为你刚生成的16位应用专用密码";
    string toAddress = "az61@gmail.com";
    string subject = "Test";
    string body = "Hello :D";
    
    SmtpClient smtp = new System.Net.Mail.SmtpClient();
    {
        smtp.Host = "smtp.gmail.com";
        smtp.Port = 587;
        smtp.EnableSsl = true;
        smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
        smtp.Timeout = 20000;
        // 必须在设置Credentials前关闭默认凭据,否则手动传入的账号密码会被系统凭据覆盖
        smtp.UseDefaultCredentials = false;
        smtp.Credentials = new NetworkCredential(fromAddress, fromPassword);
    }
    smtp.Send(fromAddress, toAddress, subject, body);
    MessageBox.Show("Success!");
    
  4. 如果完成以上操作后仍报错,先在浏览器登录对应发件Gmail账号,查看是否收到「异常登录拦截」的安全提醒,手动确认该操作是本人发起后,等待10分钟左右重试发信即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:12:29