Rails配置Devise邮件确认功能后无法接收验证邮件问题求助
问题排查&修复方案
ENV变量使用错误
你当前配置里的user_name: ENV['test@gmail.com']、password: ENV['123456']写法完全错误。ENV[]的作用是读取系统环境变量,方括号内需要填环境变量的键名,而非实际值。
修复方式:- 测试阶段可先直接填实际值:
user_name: '你的实际gmail地址',password: '你生成的谷歌应用专用密码' - 生产环境需先在系统中配置对应环境变量,比如设置
GMAIL_USER=xxx@gmail.com、GMAIL_PWD=你的授权码,再修改配置为user_name: ENV['GMAIL_USER']、password: ENV['GMAIL_PWD']
- 测试阶段可先直接填实际值:
谷歌账号认证规则适配
谷歌早在2022年5月就全量关闭了低安全性应用访问权限,你开启该选项也无法正常使用账号密码直接登录SMTP服务。
修复方式:- 先给你的谷歌账号开启两步验证
- 进入谷歌账号安全设置页,生成「应用专用密码」
- 将生成的16位应用专用密码作为SMTP的密码填入配置,不要使用你的谷歌账号原登录密码
配置拼写错误
你配置里的:tsl => true拼写错误,正确写法为:tls => true,该错误会导致SSL握手失败,邮件发送流程直接中断。配置位置错误
你将SMTP配置写在environment.rb中不符合Rails规范,推荐按环境拆分配置:开发环境配置写到config/environments/development.rb,生产环境配置写到config/environments/production.rb,避免不同环境配置冲突。开启错误提示
你当前发送失败无报错,是因为开发环境默认关闭了邮件发送错误抛出。在development.rb中添加配置:config.action_mailer.raise_delivery_errors = true config.action_mailer.perform_deliveries = true开启后发送出错时会直接抛出异常,方便排查问题。
日志&二次校验
- 查看
log/development.log中的邮件发送日志,确认是否有发送报错、退信记录 - 检查发件用gmail的已发送文件夹、垃圾箱,确认是否是邮件被谷歌拦截未发出
- 确认你已经执行过
rails db:migrate将confirmable相关字段写入用户表,且user.rb的devise配置中确实添加了:confirmable模块
- 查看
内容的提问来源于stack exchange,提问作者ace Garcia
相关产品推荐
相关产品推荐

