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

2024年3月19日Google SMTP应用密码突发失效求助

Rails Action Mailer 用谷歌SMTP+App Password发邮件,显示成功但无已发送记录且App Password无使用痕迹

问题概述

  • 未改动代码,使用Ruby on Rails Action Mailer通过谷歌SMTP发邮件,采用App Password,不受2024年低安全性应用停用政策影响
  • 已尝试生成新App Password、重新开启/关闭双重认证,问题依旧
  • 核心异常:后端收到谷歌返回的发送成功响应,但邮件未出现在谷歌账号的已发送文件夹;App Password页面显示新密码无使用记录,旧密码最后使用日期为3月18日
  • 额外测试:端口465无法发送,切换到587可获取成功响应,但问题仍存在;另一个谷歌账号用同样方案也无效

排查建议

1. 确认App Password的生成规范

  • 生成App Password时,必须选择「Mail」应用类型,不要选「Other (Custom name)」,部分场景下自定义类型会有隐性权限限制
  • 核对谷歌账号安全性页面,确保双重认证处于开启状态(App Password仅对开启双认证的账号生效)

2. 验证环境变量加载正确性

  • 打开Rails控制台,执行 ENV["email_requests"] 和 ENV["email_requests_password"],确认输出的邮箱和App Password与谷歌后台生成的完全一致(注意不要有多余空格、大小写错误)
  • 可以临时把配置里的密码换成硬编码的App Password做测试,排除环境变量加载失败的问题

3. 检查邮件发送逻辑是否实际执行

  • 确认调用Action Mailer的代码没有被条件分支跳过,若用了异步发送(比如Sidekiq),要检查异步队列是否正常运行、任务是否被执行
  • 在发送邮件的代码前后加日志,比如:
    Rails.logger.info "准备发送邮件,使用账号:#{ENV["email_requests"]}"
    Rails.logger.info "使用的App Password:#{ENV["email_requests_password"]}"
    YourMailer.your_method.deliver_now
    Rails.logger.info "邮件发送请求已提交"
    
    查看日志确认参数正确,且确实触发了发送动作

4. 手动模拟SMTP发送流程

  • 用telnet手动连接谷歌SMTP服务器,模拟发送流程,排查是否是Rails配置之外的问题:
    # 连接服务器
    telnet smtp.gmail.com 587
    # 发送EHLO命令
    EHLO gmail.com
    # 启动TLS加密
    STARTTLS
    # 认证(把<base64字符串>替换成你生成的编码)
    AUTH PLAIN <base64编码的"你的邮箱\0你的App Password">
    # 设置发件人
    MAIL FROM:<your-email@gmail.com>
    # 设置收件人
    RCPT TO:<recipient@example.com>
    # 开始写邮件内容
    DATA
    Subject: 测试邮件
    这是测试内容。
    .
    # 退出连接
    QUIT
    
    注:base64编码可以用命令生成:echo -n "your-email@gmail.com\0your-app-password" | base64
    完成后检查谷歌账号的已发送文件夹,若手动发送也无记录,说明是谷歌账号层面的问题;若手动发送成功,再回到Rails配置排查

5. 调整Action Mailer配置细节

  • 尝试添加 openssl_verify_mode: 'none' 到smtp_settings,排除SSL证书验证问题(仅测试用,生产环境不建议)
  • 把 authentication: "plain" 改成 authentication: :login,部分环境下认证方式兼容性不同

原配置代码

config.action_mailer.smtp_settings = {
    address: "smtp.gmail.com",
    port: 587,
    domain: "gmail.com",
    authentication: "plain",
    enable_starttls_auto: true,
    user_name: ENV["email_requests"],
    password: ENV["email_requests_password"]
  }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 14:46:26