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

如何解决Gmail SMTP服务器需安全连接或客户端未认证报错

问题根因

你遇到的SMTP身份验证报错,是谷歌2022年5月30日正式下线「低安全性应用访问」功能导致的——下线后所有直接使用账号主密码登录Gmail SMTP服务的第三方请求,都会被谷歌安全策略直接拦截,和你本地代码逻辑本身没有关系。

修复方案

你现有代码改动量最小的修复方式是改用谷歌应用专用密码做SMTP身份验证,不需要重构发送逻辑:

  • 前置条件:用于发信的Gmail账号必须先开启两步验证,没有开启两步验证的账号无法生成应用专用密码
  • 操作步骤:
    1. 登录对应Gmail的谷歌账号,进入「管理你的谷歌账号-安全」设置页
    2. 在「登录Google」板块找到「应用专用密码」入口,选择应用类型为「邮件」,设备根据你部署网站的服务器类型选择即可
    3. 点击生成后会拿到一组16位的应用专用密码,直接替换你原有代码里SMTP认证部分的主密码即可,其他代码完全不需要改动

核心代码替换参考:

// 仅替换密码部分,其他SMTP配置(地址、端口、SSL开启状态)保持原有即可
smtpClient.Credentials = 
    new System.Net.NetworkCredential("sendemail@gmail.com", "替换为你生成的16位应用专用密码,无需保留生成时的空格");

替换完成后即可正常发信,应用专用密码是谷歌给第三方服务单独颁发的授权凭证,不会触发低安全性应用拦截,权限和主账号密码隔离,安全性比原来直接用主密码更高。

如果你的Gmail账号没有开启两步验证的条件,也可以选择改用Gmail API配合OAuth2.0授权的方式发信,但这个方案需要先在谷歌云平台创建项目、开通Gmail API权限、走OAuth授权流程拿凭证,代码改动量很大,不是特殊情况不推荐用。

额外优化建议

你现有代码还有两个可以顺手修复的问题:

  • 直接拼接用户输入内容到HTML邮件正文的写法存在XSS注入风险,建议对txt_name、txt_number、txt_email、txt_message几个输入框的内容先做HTML特殊字符转义,再拼接到邮件正文里,避免恶意用户提交脚本内容引发安全问题
  • 不要在代码里硬编码邮箱账号和密码,建议把这类敏感配置存到站点的web.config配置文件中做加密处理,避免源码泄露后邮箱被盗用
  • 如果替换密码后依然报错,先检查部署网站的服务器到smtp.gmail.com的587端口是否被防火墙、安全组规则拦截,确认网络连通性正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 14:31:00