C#应用通过Gmail发送邮件新账号配置失败问题咨询
故障原因及解决方案
可能的故障原因
- 新注册的Gmail账号默认触发了Google的可疑登录拦截规则,就算你开启了低安全性应用访问,Google也会先屏蔽非信任设备/IP的登录请求
- 2022年之后Google已经逐步关闭了普通Gmail账号的「允许低安全性应用访问」功能入口,新注册账号即使你看到开关显示开启,实际规则已经不生效
- 新账号没有完成额外的身份验证步骤,首次在新设备/IP发信前需要手动确认登录尝试
- 如果是Google Workspace企业账号,管理员可能额外限制了SMTP发信权限
具体解决步骤
- 优先替换为应用密码登录(要求账号先开启两步验证,这是目前最稳定的方案):
- 进入Google账号的「安全」设置,开启「两步验证」
- 两步验证开启后,在安全页面找到「应用密码」入口,生成一个专用的16位应用密码
- 把代码里
NetworkCredential传入的普通登录密码替换为这个16位应用密码
- 如果暂时无法开启两步验证,先做异常登录确认:
- 用浏览器登录这个新的Gmail账号,查看「可疑登录尝试」的提醒邮件,确认对应请求是你本人操作,把请求IP加入信任列表
- 完成Google账号的解锁人机验证,10分钟内再测试发信
- 如果你使用的是Google Workspace企业账号,联系管理员确认:
- 该账号的SMTP发信权限已经开启
- 管理员没有限制第三方应用的访问权限
代码优化建议
你当前使用的SmtpClient类微软已经标记为过时,后续.NET版本会逐步废弃,建议替换为MailKit等更现代的邮件库,兼容性和错误提示会更清晰。
现有代码仅需修改凭据部分即可测试,修改后的核心代码示例:
public static void SendEmail(string strEmail,string strRandomPassword) { try { MailMessage message = new MailMessage(); SmtpClient smtp = new SmtpClient(); message.From = new MailAddress("你的公司Gmail地址"); message.To.Add(new MailAddress(strEmail)); message.Subject = "Password Reset"; message.IsBodyHtml = true; message.Body = "Here is your key to reset your password. Key: " + strRandomPassword; smtp.Port = 587; smtp.Host = "smtp.gmail.com"; smtp.EnableSsl = true; smtp.UseDefaultCredentials = false; // 替换为生成的16位应用密码 smtp.Credentials = new NetworkCredential("你的公司Gmail地址", "生成的16位应用密码"); smtp.DeliveryMethod = SmtpDeliveryMethod.Network; smtp.Send(message); } catch (Exception ex) { MessageBox.Show(message + ex.Message, "Program Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
内容的提问来源于stack exchange,提问作者tech127956
相关产品推荐
相关产品推荐

