トレーニング中、私はWebサイトで作業しており、Ruby on Railsを使用しています。メールをユーザーに送信する必要があるため、メーラーを作成しました。
私はdevelopment.rb
とenvironment.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キーに関連している可能性があることもわかりました。
何が悪いのか知っていますか?
前もって感謝します
まず、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の規約を使用していない理由はありますか?
その一部がお役に立てば幸いです。幸運を!
取り替える
config.action_mailer.delivery_method = 'smtp'
と
config.action_mailer.delivery_method = :smtp
Rails.configuration.action_mailer.smtp_settingsが記号化されたキーであることを確認します
インストールされていないか実行されていない開発中のすべての送信メールに、アプリがmailcatcher
gemを使用している可能性があります。少なくともそれが私の問題でした。 https://mailcatcher.me を確認し、表示される指示に従ってください。
config.action_mailer.perform_deliveries = true
行を削除する必要があります。
RSpecテストでSidekiq::Worker.drain_all
を実行しているときにこの問題に遭遇しました。config.action_mailer.delivery_method = :test
がconfig/environments/test.rb
に含まれていたので、私は夢中になりました。
解決策は、config.action_mailer.delivery_method = :test
をconfig/environments/development.rb
に設定することでした。これは、RSpecテストでconfig/environments/development.rb
がconfig/environments/test.rb
をオーバーライドしていることを意味するため、混乱を招きます。
とにかく、これは他の人の問題を解決するかもしれません。