Rails使用Mailform gem本地正常但Heroku生产环境无法收到邮件问题
问题排查与修复方案
- 首先修正配置中的明显错误:
- 将
config.action_mailer.raise_delivery_errors改为true,当前配置关闭了投递错误抛出,你无法从日志中看到Gmail接口返回的实际拒绝原因,修改后重新部署复现问题,即可从日志中拿到具体报错信息。 - 修正
default_url_options的host配置,Heroku默认的子域名不需要加www前缀,将https://www.iliazolas.herokuapp.com改为https://iliazolas.herokuapp.com,错误的域名会触发Gmail的垃圾邮件拦截规则。
- 将
- 针对Gmail发件限制的修复:
- 登录你的Gmail账号,进入安全活动页面,查看是否有来自Heroku节点的异常登录拦截记录,如果存在直接标记为本人操作放行即可。
- 如果你的Gmail账号开启了两步验证,低安全性应用访问权限会自动失效,需要在Google账号安全设置中生成应用专用密码,将
ENV['GMAIL_PASSWORD']替换为该专用密码即可。 - 调整MailForm的发件人配置:不要直接将表单提交的访客邮箱作为发件人,会触发Gmail的SPF校验失败直接拒收邮件,正确的做法是将发件人固定为你自己的Gmail地址,将
reply_to字段设置为访客提交的邮箱,既可以正常收信,回复时也会直接发送给访客。
- 额外注意:2022年起Google已经全面停止了普通Gmail账号的低安全性应用访问支持,如果你后续仍有问题,建议切换为SendGrid等专业邮件发送服务,Heroku也有对应的免费插件可以直接开通使用。
内容的提问来源于stack exchange,提问作者Ilia
相关产品推荐
相关产品推荐

