Rails Mailer使用新Gmail账号遇Net::SMTPAuthenticationError问题求助
我之前也踩过Gmail SMTP认证的坑,结合你描述的情况——旧账号正常可用、新账号关闭双重认证仍报错,且staging环境也出现相同问题,给你几个针对性的排查步骤:
确认Gmail账号的SMTP访问权限逻辑
现在Gmail的政策是:未开启双重认证(2FA)的账号,已经不再支持普通密码登录非OAuth类的邮件服务(包括Rails Mailer)。你需要先开启账号的双重认证,然后生成应用专用密码(App Password),用这个16位的专用密码代替普通密码配置到Rails里。
生成路径:登录Gmail网页端 → 右上角头像 → 管理你的Google账号 → 安全 → 双重认证(确保已开启) → 应用专用密码 → 选择“邮件”+自定义设备名称 → 生成后复制密码。核对Rails配置的完整性
检查config/environments/development.rb(以及staging环境对应的config/environments/staging.rb)里的SMTP配置是否正确:config.action_mailer.delivery_method = :smtp config.action_mailer.smtp_settings = { address: 'smtp.gmail.com', port: 587, domain: 'your-app-domain.com', # 可填应用域名,或直接用'gmail.com' user_name: 'your-new-gmail-address@gmail.com', password: 'your-generated-app-password', authentication: :plain, enable_starttls_auto: true }重点确认:用户名是完整邮箱地址,密码是生成的应用专用密码,
authentication设为:plain,enable_starttls_auto为true。解除Gmail的临时登录限制
新账号第一次从你的本地/服务器环境登录SMTP,可能被判定为异常登录。先在网页端登录这个新Gmail账号,检查是否有“异常登录提醒”,点击“这是我”解除限制后再测试。同步staging环境的配置
staging环境通常用环境变量存储敏感信息(比如Figaro、dotenv或服务器环境变量),确认staging的邮箱用户名和密码已经更新为新账号的信息,没有沿用旧配置。验证密码输入的准确性
排查是否有拼写错误、大小写问题,或是复制应用专用密码时多了空格——这类细节很容易被忽略。
如果以上步骤都无效,可以在Rails控制台手动测试发送,获取更详细的错误信息:
ActionMailer::Base.mail(from: 'your-new-gmail@gmail.com', to: 'test@example.com', subject: 'Test', body: 'Test').deliver_now
根据控制台输出的具体提示再针对性排查。
内容的提问来源于stack exchange,提问作者Taylor A. Leach

