【问题标题】:Error sending emails with Rails 4 & Devise (connection refused, port 25)使用 Rails 4 和 Devise 发送电子邮件时出错(连接被拒绝,端口 25)
【发布时间】:2017-01-05 11:29:58
【问题描述】:

我在发送电子邮件时遇到了一些大问题。我尝试过多种做事方式;使用 gmail、mailgun、sendgrid、mailgun gem 等,一点运气都没有。出于某种原因,它尝试使用端口 25 发送,但如下所示,我指定了端口 587。我得到的错误是:

Errno::ECONNREFUSED(连接被拒绝 - “localhost”端口 25 的连接(2)):

我的 development.rb 文件如下:

  config.action_mailer.default_url_options = { :host => 'localhost:3000' }
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.perform_deliveries = true

  config.action_mailer.smtp_settings = {
  :address => 'smtp.mailgun.org',
  :port => 587,
  :api_key => 'key-5d321b99f722e71f759993ee41512b99',
  :user_name => 'postmaster@sandbox3ed8de9510c845c68bf0d867a8f25394.mailgun.org',
  :password => '(mailgun password)',
  :domain => 'sandbox3ed8de9510c845c68bf0d867a8f25394.mailgun.org',
  :authentication => :plain,
  :enable_starttls_auto => true
  }

我已经四处寻找解决方案,但似乎没有一个能解决问题。我完全没有想法。

整个 Development.rb 文件:

    Rails.application.configure do
  # Settings specified here will take precedence over those in config/application.rb.

  # In the development environment your application's code is reloaded on
  # every request. This slows down response time but is perfect for development
  # since you don't have to restart the web server when you make code changes.
  config.cache_classes = false

  # Do not eager load code on boot.
  config.eager_load = false

  # Show full error reports and disable caching.
  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = false

  # Don't care if the mailer can't send.

  # Print deprecation notices to the Rails logger.
  config.active_support.deprecation = :log

  # Raise an error on page load if there are pending migrations.
  config.active_record.migration_error = :page_load

  # Debug mode disables concatenation and preprocessing of assets.
  # This option may cause significant delays in view rendering with a large
  # number of complex assets.
  config.assets.debug = true

  config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    address: "smtp.gmail.com",
    port: 587,
    user_name: "chris.edhogben@gmail.com",
    password: "<password>",
    authentication: 'plain',
    enable_starttls_auto: true
  }

  config.action_mailer.raise_delivery_errors = true
  config.action_mailer.default :charset => "utf-8"

  # Asset digests allow you to set far-future HTTP expiration dates on all assets,
  # yet still be able to expire them through the digest params.
  config.assets.digest = true

  # Adds additional error checking when serving assets at runtime.
  # Checks for improperly declared sprockets dependencies.
  # Raises helpful error messages.
  config.assets.raise_runtime_errors = true

  # Raises error for missing translations
  # config.action_view.raise_on_missing_translations = true
end

【问题讨论】:

  • 您的确切版本的 rails 是什么?
  • 您的应用中是否还有其他内容可以更改操作邮件设置?
  • 我在 Rails 4.2 上。我不相信应用程序中还有任何其他内容可以更改操作邮件设置。我应该寻找什么来澄清这一点吗?我确实安装了 mailgun gem 和 sendgrid gem,但是我都删除了。

标签: ruby-on-rails ruby email devise mailgun


【解决方案1】:

试试这个配置

config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  address:  'localhost',
  port:     25,
  domain:   'exmaple.com',
      enable_starttls_auto: false
}

【讨论】:

    【解决方案2】:

    production.rb中使用以下设置

    config.action_mailer.default_url_options = { :host => 'localhost:3000' }
    config.action_mailer.delivery_method = :smtp
    config.action_mailer.perform_deliveries = true
    
      ActionMailer::Base.smtp_settings = { 
        :address => 'smtp.mailgun.org',
        :port => 587,
        :user_name => 'postmaster@sandbox3ed8de9510c845c68bf0d867a8f25394.mailgun.org',
        :password => '(mailgun password)',
        :domain => 'sandbox3ed8de9510c845c68bf0d867a8f25394.mailgun.org',
        :authentication => :plain
      }
    

    【讨论】:

    • 我已经用我的 mailgun 密码将它投入生产并重新启动了我的服务器,仍然是同样的错误。仍在尝试使用端口 25。
    【解决方案3】:

    对 gmail 使用以下设置:

    config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
    config.action_mailer.delivery_method = :smtp
    config.action_mailer.smtp_settings = {
      address: "smtp.gmail.com",
      port: 587,
      user_name: "username",
      password: "password",
      authentication: 'plain',
      enable_starttls_auto: true
    }
    

    如果您收到 SMTP 身份验证错误,请点击 http://www.google.com/accounts/DisplayUnlockCaptcha 并启用它。它将使谷歌能够在 10 分钟内注册新应用

    【讨论】:

    • 感谢您的建议。我已经尝试过了,但是我的问题仍然相同:“Errno::ECONNREFUSED: Connection denied - connect(2) for "localhost" port 25”
    • @edhog:用 gmail 试试上面的设置,如果不行,然后粘贴你完整的 development.rb 和使用的设置
    • 我试了一下,得到了一个从谷歌生成的密码。它仍然给了我同样的错误:端口 25。我相信我在 production.rb 中仍然遇到同样的问题。我已将我的 development.rb 完整粘贴在原始帖子的底部。
    【解决方案4】:

    在 production.rb 中添加相同的邮件配置。 重启服务器并检查

    【讨论】:

      猜你喜欢
      • 2017-07-16
      • 1970-01-01
      • 2015-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-07
      • 2018-01-22
      相关资源
      最近更新 更多