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

C#调用Gmail SMTP发信失败 低安全应用访问方案咨询

问题根因

你碰到的5.7.0 Authentication Required报错,核心原因就是Google已经全面下线Gmail的「低安全应用访问」入口,不再支持第三方应用直接通过账号+登录密码的方式调用SMTP服务,你加的SmtpServer.UseDefaultCredentials = false;属于基础配置项,解决不了Google侧的权限限制,所以改完依然报错。

继续使用Gmail发信的修复方案

方案1:应用专用密码(改造成本最低,5分钟即可落地)

这个方案要求你的Gmail账号已经开启两步验证(2FA),未开启两步验证的账号不会显示应用专用密码入口:

  1. 登录Google账号,进入「管理Google账号」-「安全性」页面
  2. 在「登录Google」板块找到「应用专用密码」选项
  3. 应用类型选「其他」,自定义备注名比如「生产车间报表通知程序」,点击生成16位专用密码
  4. 调整原代码的两个问题:
    • 把UseDefaultCredentials = false的赋值移到Credentials赋值前面——这是SmtpClient的已知坑:如果先给Credentials赋值,再设置UseDefaultCredentials=false,之前赋的凭据会被直接清空,必然报认证错误
    • 把Credentials里传入的原账号登录密码,替换成刚生成的16位应用专用密码,其他SMTP参数(smtp.gmail.com、587端口、开启SSL)无需改动

修正后的可运行代码:

try
{
    MailMessage mail = new MailMessage();
    System.Net.Mail.SmtpClient SmtpServer =
        new System.Net.Mail.SmtpClient("smtp.gmail.com");
    string sender = "user@gmail.com";
    mail.From = new MailAddress(sender);
    mail.To.Add("receiver@plastikon.com");
    mail.Priority = MailPriority.High;
    mail.Subject = subject;
    mail.IsBodyHtml = true;
    mail.Body = ($"{body} \n Name of computer: { HostName} ");

    SmtpServer.Port = 587;
    // 注意赋值顺序:先关闭默认凭据,再设置自定义凭据
    SmtpServer.UseDefaultCredentials = false;
    SmtpServer.EnableSsl = true;
    // 密码替换为生成的16位应用专用密码,不要填原账号登录密码
    SmtpServer.Credentials = new 
    System.Net.NetworkCredential("user@gmail.com", "xxxxxxxxxxxxxxxx");

    SmtpServer.Send(mail);
}

方案2:Gmail API OAuth2认证(Google官方推荐方案)

如果对安全性要求更高,可以去Google Cloud控制台创建项目,启用Gmail API,配置OAuth2.0客户端凭据,程序走OAuth授权流程拿到访问令牌后调用API发信。这个方案不需要使用固定密码,权限粒度更细,但配置流程比应用专用密码复杂,适合长期维护的正式生产系统使用。

额外提醒:微软已经把System.Net.Mail.SmtpClient标记为过时类,存在不少已知的协议兼容性bug,新写代码建议换成开源的MailKit库实现邮件发送,对TLS、现代认证方式的支持更好,踩坑概率低很多。

生产场景更推荐的替代发信方案

车间生产系统的核心要求是稳定,不要因为第三方平台规则调整、网络波动导致通知中断,更推荐下面这些方案:

  • 换用企业自有邮箱SMTP:从你代码里的收件人域名看,你们公司有自己的企业邮箱,直接找IT部门索要企业邮的SMTP地址、端口、发信账号密码即可,企业邮一般不会随意调整密码认证规则,内网访问稳定性也更高。
  • 接入第三方事务邮件服务:海外的SendGrid、Mailgun,国内的腾讯云SES、阿里邮件推送这类服务,都提供标准SMTP和HTTP API两种发信方式,有明确的服务可用性承诺,自带发信日志、失败重试、告警能力,发信送达率也有保障,免费额度足够覆盖内部报表通知的发信量。
  • 内网部署邮件转发服务:如果车间网络对公网访问有严格限制,可以在内网服务器搭Postfix之类的轻量邮件转发服务,本地程序只需要把邮件发给内网转发节点,由转发节点统一完成公网投递,避免公网服务波动直接影响生产线的程序运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 04:12:55