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

Rails 6开发环境Action Mailer SMTP认证失败求助

解决Rails 6 Action Mailer Gmail SMTP认证失败问题

我之前也碰到过一模一样的坑!谷歌现在对SMTP登录的限制越来越严,“允许低安全性应用”这个选项其实已经快被淘汰了,而且对启用了两步验证的账号完全无效。结合你的配置和错误日志,给你几个针对性的解决步骤:

1. 优先检查两步验证(2FA)状态

如果你给谷歌账号开了两步验证,绝对不能用普通的邮箱密码,必须生成应用专用密码:

  • 登录你的谷歌账号,进入「安全」设置页面
  • 找到「应用专用密码」选项(需要先验证你的身份)
  • 生成一个专门用于Rails邮件发送的密码,然后把config.action_mailer.smtp_settings里的:password换成这个生成的密码

2. 确认“低安全应用访问”是否真的生效(仅适用于未开2FA的账号)

谷歌现在已经把“允许低安全性应用”的入口藏得很深了:

  • 登录谷歌账号,搜索「Less secure app access」直接进入设置页
  • 确保这个开关是打开的,但要注意:这个功能会在2024年之后完全移除,长期来看还是推荐用应用专用密码

3. 核对SMTP配置的细节

你的基础配置是对的,但要再确认几个点:

  • :user_name必须是完整的邮箱地址(比如name@gmail.com,不能只写name)
  • 密码没有拼写错误,建议用环境变量存储密码(比如ENV['GMAIL_SMTP_PASSWORD']),避免硬编码出错
  • 确保enable_starttls_auto: true没有被遗漏,Gmail 587端口必须启用TLS

4. 解锁谷歌账号的可疑登录限制

有时候谷歌会把本地开发环境的SMTP登录判定为可疑操作:

  • 登录你的谷歌邮箱,看看有没有「可疑登录提醒」的邮件
  • 点击邮件里的「这是我本人操作」,解锁账号后再尝试发送邮件

5. 长期方案:改用OAuth2认证

如果上面的方法都临时解决了问题,但想更安全合规,推荐改用OAuth2认证:

  • 可以使用gmail_oauth2 gem,或者Rails官方支持的OAuth2配置
  • 这种方式不需要暴露密码,也符合谷歌未来的安全政策,避免以后再出问题

你的当前配置参考

config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = { 
  :address => "smtp.gmail.com", 
  :port => 587, 
  :user_name => "name@gmail.com", 
  :password => "gmail-password", 
  :authentication => :plain, 
  :enable_starttls_auto => true, 
}
config.action_mailer.perform_caching = true
config.action_mailer.default_url_options = { :host => "localhost:3000" }

错误日志参考

[ActiveJob] [ActionMailer::MailDeliveryJob] [3d533896-b670-404f-baa7-aaf9ecd8ff81] Error performing ActionMailer::MailDeliveryJob (Job ID: 3d533896-b670-404f-baa7-aaf9ecd8ff81) from Async(mailers) in 9827.83ms: Net::SMTPAuthenticationError (535-5.7.8 Username and Password not accepted. Learn more at ):
C:/Ruby26-x64/lib/ruby/2.6.0/net/smtp.rb:981:in check_auth_response' C:/Ruby26-x64/lib/ruby/2.6.0/net/smtp.rb:736:in auth_plain'
C:/Ruby26-x64/lib/ruby/2.6.0/net/smtp.rb:728:in authenticate' C:/Ruby26-x64/lib/ruby/2.6.0/net/smtp.rb:565:in do_start'
C:/Ruby26-x64/lib/ruby/2.6.0/net/smtp.rb:518:in `start'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 13:27:30