Rails电子邮件与gmail smtp错误“Errno :: ECONNREFUSED - 无法建立连接,因为目标计算机主动拒绝它。”

时间:2013-11-19 12:00:54

标签: ruby-on-rails ruby-on-rails-3 smtp gmail

尝试在我的本地计算机上以开发模式从我的Rails 3应用程序中发送电子邮件时,收到以下错误:

  

Errno :: ECONNREFUSED in RemindersController #create

     

无法建立连接,因为目标计算机是主动的   拒绝了。 - 连接(2)

2 个答案:

答案 0 :(得分:2)

在SO和博客文章上花了几个小时筛选类似的问题而没有提出的解决方案有效,这是我最终得到的解决方案:

TL;博士

将您的smtp端口设置更改为25,而不是587,这是所有教程和&文档。

详细答案(针对人类):

第1步。请继续关注railscast #206然后再回来。我等了。

第2步。即使你发现了荒谬的错误,也会让他看起来更加轻松。

第3步。转到app / config / environments / development.rb并将第17行从false更改为true。这将告诉你事情搞砸了。

# config.action_mailer.raise_delivery_errors = false
config.action_mailer.raise_delivery_errors = true

第4步。仍然在app / config / environments / development.rb中,在最后一个end语句之前添加以下代码。 (当您处于开发模式时,您不再需要在截屏中创建的app / config / initializers / setup_mail.rb文件,并且可以安全地将其删除。)

  config.action_mailer.delivery_method = :smtp

  config.action_mailer.smtp_settings = { 
    :address              => "smtp.gmail.com",  
    :port                 => 25,  
    :user_name            => "<your username>@gmail.com",  
    :password             => "<your password>",  
    :authentication       => "plain",
    :enable_starttls_auto => true
  }

注意:

  • 请注意,我们没有在教程中指定:domain设置 它工作正常。

  • 另请注意,我们使用your_username @ gmail.com 作为 :user_name设置。

  • 如果您使用gmail帐户进行两步验证,则可以使用 生成一个特殊的app-specific
    password
    免责声明:我没试过。

  • 和房间里的大胖大象,是我们用:port => 25 尽管事实上几乎每一个教程,SO问题和导轨指南都只建议587.尽管事实并非587。但是,这可能 可能是因为我的工作阻止端口587?我不知道。但 这是我的关键问题,没有人为我解决。找出是否的方法 这是你的问题是使用telnet。如果你在Windows上 必须first enable telnet by following these instructions。 然后转到命令提示符并键入telnet smtp.gmail.com 587 如果它有效,你会得到像220 mx.google.com ESMTP pi6sm33274849wic.3 - gsmtp这样的回复。否则它会告诉你它不能 连接,在这种情况下,您可以在不同的端口上尝试,例如。 telnet smtp.gmail.com 25

我希望这有助于一些失去的灵魂。

答案 1 :(得分:0)

我在阅读Agile Web Development with Rails 4第13章时遇到了这个问题,事实证明,添加到config/environment.rb的所有电子邮件配置内容都被忽略了,尽管该书指出&#34;已共享&#34 ;可以在那里添加所有环境的电子邮件设置。

将设置移至config/environments/development.rb(并重新启动Rails服务器)修复了此问题,允许在 25 端口或端口 587 上发送电子邮件任何问题:

# development.rb
Rails.application.configure do

  # ...blah blah blah...

  config.action_mailer.raise_delivery_errors = true
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    address: 'smtp.gmail.com',
    port: 587,
    user_name: 'yourusername@gmail.com',
    password: 'yourpassword',
    authentication: 'plain',
    enable_starttls_auto: true
  }
end

注意: development.rb最初未包含任何与电子邮件相关的设置,因此我不认为environment.rb中的值已被取代 - 它更像是没有效果。 I18n.default_locale = 'en-GB' 中的environment.rb正在工作,所以它不像文件被完全忽视......