使用FluentEmail对接Gmail SMTP发信报5.7.0认证错误 开低安全应用仍失效
FluentEmail对接Gmail报5.7.0 Authentication Required 修复方案
报错本质是Gmail SMTP服务器直接拒绝了提交的认证请求。此前可开启的「允许低安全性应用访问」选项,Google已在2022年5月全面关停对应的服务通道,即便开启也不会被服务器认可,是当前报错的核心诱因。
落地修复步骤
- 替换认证规则
- Gmail当前不支持使用账户常规登录密码作为第三方SMTP的认证凭证
- 需先为目标Gmail账户开启两步验证,再生成16位专属应用专用密码,替换代码中
NetworkCredential构造函数里填写的普通登录密码
- 修正代码逻辑缺陷
- Main方法标记了
async Task却调用同步的Send()方法,异步上下文会把真实SMTP错误嵌套在AggregateException内部,导致无法定位根因,需替换为异步调用await email.SendAsync() - 校验
From()传入的发件人地址,必须与NetworkCredential中配置的认证邮箱完全一致,使用无关的发件人地址会直接触发服务器的认证拦截
- Main方法标记了
- 匹配端口加密规则
- 587端口对应STARTTLS显式加密,不要和465端口的隐式SSL加密逻辑混用,否则会在连接握手阶段被判定为认证失败
修正后的核心代码
namespace EmailDemo { class Program { static async Task Main(string[] args) { SmtpClient smtp = new SmtpClient { Host = "smtp.gmail.com", Port = 587, EnableSsl = true, UseDefaultCredentials = false, DeliveryMethod = SmtpDeliveryMethod.Network, // 替换为生成的16位应用专用密码,而非Gmail常规登录密码 Credentials = new NetworkCredential("你的认证Gmail账号@gmail.com", "16位应用专用密码") }; Email.DefaultSender = new SmtpSender(smtp); var email = Email // 发件人地址必须与认证账号完全一致 .From("你的认证Gmail账号@gmail.com") .To("收件人@gmail.com") .Subject("Test Email") .Body("email content yes we love content YARRRR"); // 异步发送,避免异常嵌套 await email.SendAsync(); } } }
补充说明:完成上述配置后如果仍报相同错误,可检查是否因连续多次认证失败被Gmail临时拦截,一般等待15-30分钟即可恢复,不存在Google侧的全局服务故障。
内容的提问来源于stack exchange,提问作者Hugh Simpson
相关产品推荐
相关产品推荐

