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

curl通过Gmail SMTP发送邮件提示Login denied是什么原因

问题成因

返回curl: (67) Login denied和本地配置、账号密码正确性无关,是Google对Gmail SMTP认证规则的全量收紧导致的:

  • Google从2022年开始逐步下线「低安全性应用访问」权限,2024年已完成全量覆盖:所有使用账号主密码、走非OAuth2/SSO认证的SMTP/IMAP/POP3连接,无论密码是否正确,都会被直接拦截返回登录拒绝。你之前的命令能正常运行,是因为账号当时还在灰度豁免名单内,近期豁免权限回收就触发了报错。
  • 不存在所谓单独开放非SSO登录的开关,网上流传的「开启低安全性应用访问」的方法已经失效超过2年,没有任何可操作入口。
可行解决方案

按改造成本从低到高排序:

方案1:使用Gmail应用专用密码(适配现有curl命令,零逻辑修改)

这是最贴合你现有测试流程的方案,仅需要账号已开启两步验证(2FA):

  • 登录Google账号进入安全设置页,确认两步验证处于开启状态,未开启则先按指引完成2FA验证流程。
  • 在两步验证设置页底部找到「应用专用密码」入口,应用类型选择「其他」,自定义备注名(比如curl-html-mail-test),点击生成后会得到一串16位长度的专用密码。
  • 将原curl命令中--user参数内的主密码替换为这串16位专用密码,其余所有参数保持不变即可正常发信。

注意:应用专用密码与账号主密码权限隔离,仅授予邮件协议访问权限,不具备账号其他操作权限,专门用于脚本、第三方客户端的邮件访问场景。

方案2:改用OAuth2认证方式发信

如果账号无法开启两步验证(比如企业域账号被管理员限制2FA配置),需要将认证逻辑替换为Google要求的OAuth2流程:

  • 在Google Cloud控制台创建桌面类应用的OAuth2凭据,申请邮件发送权限。
  • 完成首次账号授权后获取长期刷新令牌,每次调用SMTP接口前兑换为短期有效的访问令牌。
  • 7.72.0及以上版本的curl原生支持SMTP的XOAuth2认证,将原命令的认证参数替换为--user '{EMAIL}@gmail.com:{ACCESS_TOKEN}' --sasl-ir --oauth2-bearer '{ACCESS_TOKEN}'即可正常连接。
    该方案改造成本较高,适合长期自动化跑邮件测试的场景。

方案3:本地测试环境替代

如果仅需要验证HTML模板的基础渲染效果,不需要测试真实Gmail客户端的拦截、样式裁剪逻辑,可以直接用本地测试SMTP服务,完全不需要配置Gmail权限:

  • 本地启动MailHog、Mailpit这类测试专用SMTP服务,将curl命令的SMTP地址改为本地服务地址(通常是smtp://127.0.0.1:1025),无需账号密码即可发信。
  • 发出去的测试邮件可以直接在本地服务自带的Web界面查看渲染效果,部分工具还内置了多客户端预览能力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 12:03:23