连接被拒绝 - 连接(2)for" localhost" 25端口导轨

时间:2015-06-23 17:23:04

标签: ruby-on-rails ruby email

在我的培训期间,我正在网站上工作,我们使用Ruby on Rails。我们需要向用户发送邮件,因此我创建了一个邮件程序。

我试图将smtp放在development.rbenvironment.rb

config.action_mailer.default_url_options = {host: '0.0.0.0:3000'}
config.action_mailer.default charset: 'utf-8'
config.action_mailer.delivery_method = 'smtp'
config.action_mailer.perform_deliveries = true
config.action_mailer.smtp_settings = {
  adress: $SMTP_SERVER,
  port: $PORT,
  from: $MAIL,

  enable_starttls_auto: true
  #authentication: 'login'
}

它告诉我错误来自此方法第6行

def create
  @user = User.new(user_params)

  respond_to do |format|
    if @user.save
      # Tell the UserMailer to send a welcome Email after save
      UserMailer.welcome_email(@user).deliver_now

      format.html { redirect_to(@user, :notice => 'User was successfully created.') }
      format.json { render :json => @user, :status => :created, :location => @user }
    else
      format.html { render :action => "new" }
      format.json { render :json => @user.errors, :status => :unprocessable_entity }
    end
  end
end

我已将端口设置为587,但我一直收到错误:

  

Errno :: ECONNREFUSED:拒绝连接 - 连接(2)for" localhost"   25号港口

看起来好像另一个文件覆盖了我的设置。我还看到它可能与我的ssh密钥没有被服务器授权有关。

知道出了什么问题吗?

提前致谢

6 个答案:

答案 0 :(得分:12)

首先,在localhost上进行开发时,实际发送邮件是常见的,而是将其视为部署细节并坚持使用Rails默认行为来发送邮件标题和内容进入控制台STDOUT(您可以在其中验证文本是否正确)。是否有特定原因需要在开发环境中测试发送消息?

其次,您提到在development.rb和environment.rb中设置了SMTP设置。您不需要两次设置这些设置;一般情况下,我将development.rb用于特定于开发环境的设置,environment.rb仅用于将始终应用于所有环境(开发,测试和实时部署的服务器)的设置。因此,如果您在development.rb和environment.rb中设置相同的设置,我首先要删除其中一个;冗余只会让你的工作更加艰难。

最后,要解决这个问题,我首先要问Rails它的设置是什么,而不是等待邮件传递失败。请尝试以下方法:

  • 启动rails console
  • 输入Rails.configuration.action_mailer.smtp_settings并将结果哈希与您的期望进行比较。此哈希应包含发送所有邮件时使用的端口和域设置(在当前环境中),因此如果ActionMailer尝试错误的端口,那么我也希望端口在这里也是错误的。

您在哪里设置$SMTP_SERVER$PORT$MAIL?您是否有任何理由不将Rails的约定用于环境变量ENV['SMTP_SERVER']等?

希望其中一些有帮助。祝你好运!

答案 1 :(得分:5)

替换

config.action_mailer.delivery_method = 'smtp'

config.action_mailer.delivery_method = :smtp

确保您的Rails.configuration.action_mailer.smtp_settings是符号化键

答案 2 :(得分:1)

我在开发自己的应用程序时遇到了同样的错误消息。我发现的是,由于我实际上没有在开发环境中发送任何电子邮件,因此需要更改位于/your_apps_name/config/environments/development.rb

处的配置文件中的一行。

来自

config.action_mailer.raise_delivery_errors = true

config.action_mailer.raise_delivery_errors = false

这导致我的应用程序在电子邮件未成功发送时引发错误,并且我实际上没有发送电子邮件,因此当然电子邮件未成功发送。

答案 3 :(得分:0)

该应用可能正在将mailcatcher gem用于开发中的所有未安装或未运行的所有出站电子邮件。至少那是我的问题。检出https://mailcatcher.me,然后按照给出的说明进行操作。

答案 4 :(得分:0)

对于像我这样笨手笨脚的人,当我在我的应用程序中完美设置所有内容时,我收到了这条消息,但我只是忘记运行在我的生产环境中添加邮件插件的命令。就我而言,该行是 SHA。我希望这可以帮助其他人。

答案 5 :(得分:-1)

您需要删除config.action_mailer.perform_deliveries = true行。