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时,会触发账号安全风控,直接拦截未授信的发信请求
修复方案
按以下步骤操作即可解决:
- 为发件Gmail账号开启两步验证,该操作是生成应用专用密码的前置条件,未开启2FA的账号无法生成对应凭据。
- 进入Gmail账号的安全设置页,找到「应用专用密码」配置项,应用类型选择“邮件”,设备选择当前开发所用设备,生成16位长度的应用专用密码,替换代码中原先填写的Gmail账号登录密码,填入时不要带生成密码时显示的分隔空格。
- 修正代码配置,补充缺失的凭据配置项,注意配置顺序:
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!"); - 如果完成以上操作后仍报错,先在浏览器登录对应发件Gmail账号,查看是否收到「异常登录拦截」的安全提醒,手动确认该操作是本人发起后,等待10分钟左右重试发信即可。
内容的提问来源于stack exchange,提问作者youngcoder
相关产品推荐
相关产品推荐

