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

Rails 7中ActiveMailer SMTP配置不生效问题求助

解决Rails开发环境中SendGrid SMTP配置未生效的问题

我之前也碰到过一模一样的问题,你的核心问题是直接给ActionMailer::Base.smtp_settings赋值的方式不对,Rails的环境配置流程会导致这种设置被覆盖或者没有正确加载到Rails.configuration里,所以才会出现默认连接本地25端口被拒绝的错误。

修复步骤

  1. 修改配置方式,改用Rails环境配置对象设置SMTP参数
    把你config/development.rb里的SMTP配置代码改成下面这样,用config.action_mailer.smtp_settings代替直接修改ActionMailer::Base的属性:

    config.action_mailer.raise_delivery_errors = true
    config.action_mailer.delivery_method = :smtp
    config.action_mailer.default_url_options = { host: 'localhost:3000' }
    config.action_mailer.smtp_settings = { 
      user_name: 'apikey', 
      password: '****', 
      domain: 'yourdomain.com', 
      address: 'smtp.sendgrid.net', 
      port: 587, 
      authentication: :plain, 
      enable_starttls_auto: true 
    }
    

    原因:Rails的环境配置系统会统一管理所有框架组件的设置,直接修改ActionMailer::Base的类属性,可能在初始化流程的后期被Rails的默认配置覆盖,或者没有同步到Rails.configuration中,导致byebug查看时看不到完整配置。

  2. 必须重启Rails服务器
    改完配置文件后一定要重启服务器,否则新的配置不会被加载——这是很多人容易忽略的点!

  3. 验证配置是否生效
    重启服务器后,再次用byebug查看Rails.configuration.action_mailer.smtp_settings,如果配置正确加载,应该能看到你设置的所有SMTP参数,而不是只有默认的:open_timeout和:read_timeout。

额外排查点

  • 确认config/development.rb确实被加载:可以在文件开头加一句puts "Loaded development mailer config",启动服务器时看控制台有没有输出这句话,排除文件没被加载的可能。
  • 检查是否有其他配置文件覆盖了SMTP设置:比如config/application.rb或者config/initializers目录下的脚本,有没有重新设置过action_mailer.smtp_settings。
  • 确认SendGrid的API密钥和域名正确:API密钥要完全匹配你在SendGrid控制台获取的内容,域名最好是你在SendGrid验证过的域名(本地测试时用localhost也可以,但部分邮件服务商可能有限制)。

错误原因解释

你看到的Errno::ECONNREFUSED错误是因为Rails使用了默认的SMTP配置(连接本地127.0.0.1的25端口),而不是你配置的SendGrid服务器,这直接说明你的自定义SMTP配置没有生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 14:12:34