升级Rails 5后密码重置邮件失效,遇Net::SMTPAuthenticationError错误
解决Rails 5下Gmail密码重置邮件的SMTP认证错误问题
刚升级Rails 5就碰到这个邮件认证坑,太闹心了!我帮你捋捋几个关键的排查和解决步骤,亲测有效的那种:
1. 先放弃「允许低安全应用」这个思路——它已经没用了
Google早在2022年就彻底停用了低安全应用访问权限,你之前开这个选项其实根本起不到作用,这是很多人踩的第一个坑。
2. 启用「应用专用密码」(前提是开启了两步验证)
如果你的Gmail账号开了两步验证,这是最稳妥的方案:
- 登录你的Google账号,进入「安全」设置页面
- 找到「应用专用密码」选项,生成一个专门给Rails用的密码(记得选「邮件」作为应用类型)
- 把这个生成的16位密码替换你Rails配置里的邮箱密码,比如在
config/environments/development.rb里:
config.action_mailer.smtp_settings = { address: 'smtp.gmail.com', port: 587, domain: 'localhost:3000', user_name: '你的gmail邮箱地址', password: '这里填生成的应用专用密码', authentication: 'plain', enable_starttls_auto: true }
3. 如果没开两步验证?试试「不太安全的应用」替代方案(仅限测试环境)
注意:这个方案只适合本地测试,绝对不能用在生产环境!
- 登录Google账号,搜索开启「Less secure app access」(现在藏得比较深,直接搜能快速找到)
- 开启这个选项后,回到Rails配置,确保你的邮箱密码是正确的,配置里的
authentication设为plain,enable_starttls_auto设为true
4. 检查Rails 5的邮件配置细节
Rails 5在邮件配置上有一些小变化,别踩这些细节坑:
- 确认
config.action_mailer.perform_deliveries = true(开发环境默认是开启的,但如果被修改过就会导致邮件不发送) - 打开
config.action_mailer.raise_delivery_errors = true,这样能看到更详细的错误信息,方便排查 - 确保
domain设置正确,开发环境可以设为'localhost:3000'或者你的本地域名
5. 测试配置是否生效
可以在Rails控制台里直接测试发送邮件,快速验证配置:
UserMailer.password_reset(User.first).deliver_now
如果控制台里没有报错,说明配置没问题,那可能是密码重置的控制器代码有问题;如果还是报错,再回头检查SMTP配置的每一项。
另外,生产环境建议不要用Gmail,改用SendGrid、Mailgun这些专门的邮件服务,更稳定也不会碰到Google的各种限制。
内容的提问来源于stack exchange,提问作者ThinQtv
相关产品推荐
相关产品推荐

