web-dev-qa-db-ja.com

接続が拒否されました-"localhost"ポート25のconnect(2)rails

トレーニング中、私はWebサイトで作業しており、Ruby on Railsを使用しています。メールをユーザーに送信する必要があるため、メーラーを作成しました。

私はdevelopment.rbenvironment.rbの両方にsmtpを入れようとしました

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:接続が拒否されました-"localhost"ポート25のconnect(2)

別のファイルが私の設定を上書きしているかのように見えます。また、サーバーによって認証されていない私のsshキーに関連している可能性があることもわかりました。

何が悪いのか知っていますか?

前もって感謝します

12
TheLittleBibi

まず、localhostで開発する場合、実際にはnotが実際にメールを送信するのが一般的です。これを展開の詳細として扱い、Railsデフォルトの動作に固執します。メールのヘッダーと内容をコンソールのSTDOUT(テキストが正しいことを確認できる場所)に吐き出すことです。開発環境でメッセージの送信をテストする必要がある特定の理由はありますか?

次に、development.rbとenvironment.rbの両方でSMTP設定を設定すると述べました。これらの設定を2回設定する必要はありません。一般に、開発環境に固有の設定にはdevelopment.rbを使用し、すべての環境(開発、テスト、およびライブデプロイされたサーバー)に常に適用される設定にのみenvironment.rbを使用します。したがって、development.rbとenvironment.rbの両方で同じ設定を行っている場合は、どちらか一方を削除することから始めます。冗長性はあなたの仕事を将来難しくするだけです。

最後に、これをトラブルシューティングするために、メールの配信が失敗するのを待つのではなく、Railsの設定を確認することから始めます。以下を試してください。

  • 起動Rails console
  • Rails.configuration.action_mailer.smtp_settingsを入力し、結果のハッシュを期待と比較します。このハッシュには、(現在の環境で)すべてのメールを送信するときに使用されるポートとドメインの設定が含まれている必要があるため、ActionMailerが間違ったポートを試行している場合、ポートもここで間違っていると思います。

$SMTP_SERVER$PORT$MAILはどこに設定しますか?環境変数、ENV['SMTP_SERVER']などにRailsの規約を使用していない理由はありますか?

その一部がお役に立てば幸いです。幸運を!

12
Topher Hunt

取り替える

config.action_mailer.delivery_method = 'smtp'

config.action_mailer.delivery_method = :smtp

Rails.configuration.action_mailer.smtp_settingsが記号化されたキーであることを確認します

4
montells

インストールされていないか実行されていない開発中のすべての送信メールに、アプリがmailcatcher gemを使用している可能性があります。少なくともそれが私の問題でした。 https://mailcatcher.me を確認し、表示される指示に従ってください。

1
The Whiz of Oz

config.action_mailer.perform_deliveries = true行を削除する必要があります。

0
Kimprap

RSpecテストでSidekiq::Worker.drain_allを実行しているときにこの問題に遭遇しました。config.action_mailer.delivery_method = :testconfig/environments/test.rbに含まれていたので、私は夢中になりました。

解決策は、config.action_mailer.delivery_method = :testconfig/environments/development.rbに設定することでした。これは、RSpecテストでconfig/environments/development.rbconfig/environments/test.rbをオーバーライドしていることを意味するため、混乱を招きます。

とにかく、これは他の人の問題を解決するかもしれません。

0
mrmicrowaveoven