Errno :: ECONNREFUSED:拒绝连接 - 连接(2)动作邮件程序

时间:2013-06-17 05:39:44

标签: ruby-on-rails ruby ruby-on-rails-3 actionmailer

我一直在使用rails。现在我在ActionMailer中面临一个小问题。我想在用户注册时发送电子邮件以确认他的注册。 我可以在开发模式中发送电子邮件,但生产模式中的不是 例外 Errno :: ECONNREFUSED:连接被拒绝 - 连接(2)每次调用传递方法时都会出现。
我写了以下代码。
我的SMTP配置看起来:
      config.action_mailer.default_url_options = {:host => “localhost:3000”}

  config.action_mailer.delivery_method = :smtp
  config.action_mailer.perform_deliveries = true
  config.action_mailer.raise_delivery_errors = true

  config.action_mailer.smtp_settings = {   
    :openssl_verify_mode => OpenSSL::SSL::VERIFY_NONE,      
    :ssl => true,
    :enable_starttls_auto => true,  #this is the important stuff!
    :address        => 'smtp.xxxx.xxx',
    :port           => xxx,
    :domain         => 'xxxxxx',
    :authentication => :plain,
    :user_name      => 'xxxxxxx@xxx.xxx',
    :password       => 'xxxxxxxxx'
  }

在控制器中,我写了以下内容:

def confirm_registration_in_c       
 @user = User.find_by_email(asdf123@gmail.com)
 if @user
      UserMailer.confirm_registration(@user).deliver            
 end
end

在我的user_mailer.rb中:

class UserMailer < ActionMailer::Base
  default from: "from@example.com"

  def confirm_registration(user)
   @user = user
   @user_name = @user.name       
   email = @user.email 
   mail(:to => email, :subject => "Reset your password")
  end
end

我可以在本地主机中以开发模式发送电子邮件,但我无法在专用服务器中发送电子邮件。
请有人帮帮我吗?

6 个答案:

答案 0 :(得分:20)

在我的情况下,当我尝试通过发送电子邮件Rails应用程序教程时遇到类似问题,Heroku日志一直告诉我

......

Errno::ECONNREFUSED (Connection refused - connect(2) for "localhost" port 25):

......

在我将代码与作者代码进行比较后,我发现我没有在 config / environments / production.rb 文件中设置我的ActionMailer配置。

然后我意识到我只是将 config / environments / development.rb 配置为发送电子邮件,但我没有为我的配置/环境/生产做过。 RB

因此,当您的应用在开发和制作之间的行为不同时,您可以查看它。

答案 1 :(得分:8)

确保您已正确配置端口。我从开发中的gmail(端口587)切换到生产中从我的本地服务器发送,并且收到此错误,直到我将端口更正为我的服务器使用的端口(端口25)。

答案 2 :(得分:5)

生产你不能写

config.action_mailer.default_url_options = { :host => "localhost:3000" }

为主机添加生产网址,例如

config.action_mailer.default_url_options = { :host => "http://www.yourdomain.com" }

答案 3 :(得分:3)

我的问题与这个问题不一样,但我觉得很多人会通过谷歌找到这个帖子。

如果您使用像sendgrid这样的外部SMTP服务并相应地设置了ActionMailer,但它仍然会出现此错误:

  

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

您可能正在使用String键传递config hash,这将被忽略。密钥必须为symbols

如果它是反序列化的,可能会发生这种情况,我所做的是确保键是符号:

config.action_mailer.smtp_settings = get_smtp_setting.symbolize_keys

答案 4 :(得分:2)

此错误还有另一个原因:

Errno::ECONNREFUSED: Connection refused - connect(2) for "localhost" port 25

应该查看服务器上的SENDMAIL服务:

  • 是否安装了SENDMAIL?
  • SENDMAIL正在运行吗?

由于已停止的SENDMAIL,我遇到了此错误。

祝你好运!

答案 5 :(得分:0)

我在尝试使用Capistrano部署wordpress时发现了类似的问题。

cap aborted! Errno::ECONNREFUSED: Connection refused - connect(2) for "{my-ip-address}" port {my-ssh-port}

我也会得到类似的错误:

Tasks: TOP => git:create_release (See full trace by running task with --trace) The deploy has failed with an error: #<Errno::ECONNREFUSED: Connection refused - connect(2) for "my-ip-address" port {my-port}>

事实证明,当我的服务器运行Fail2Ban时,这是并发SSH会话的问题。为了解决这个问题,我只做了以下几点:

  1. 编辑包含SSH配置的jail

    $ sudo nano /etc/fail2ban/jail.local

  2. 查找[SSH]并设置enabled = false

  3. 然后找到[ssh-ddos]并设置enabled = false

  4. 请记住在更改后打开Fail2Ban并打开-ssh(如果那就是你的使用方式)

  5. $ sudo service fail2ban reload

    $ sudo /etc/init.d/ssh reload

    值得注意的是,部署中的不同步骤(任务)将拒绝连接。例如,重启后快速bundle exec cap production deploy:check一切都很好。然后我尝试部署并收到相同的错误,但在执行不同的任务期间。我也使用UFW,我禁用并重新启用没有问题。 UFW不是导致上述问题的原因。

    我解决了这个问题之后遇到了类似的问题。这是current目录权限的问题。这是over here.