web-dev-qa-db-ja.com

開発中にActionMailerがメールを送信しないRails 4

このメーラーがメールを送信しないのはなぜですか? (またはデバッグのアイデアはありますか?)

My_app/config/environments/development.rbに次のコードがあります。

  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    address:              'smtp.gmail.com',
    port:                 587,
    domain:               'my_app.com',
    user_name:            ENV['GMAIL_USERNAME'],
    password:             ENV['GMAIL_PASSWORD'],
    authentication:       'plain',
    enable_starttls_auto: true  }

次に、ローカルコンピューターの〜/ .bash_profileに次のコードがあります。

export GMAIL_USERNAME='blah@my_app.com'
export GMAIL_PASSWORD='***'

ターミナルで$ envを実行すると、両方の環境変数が正しく設定されていることがわかります。

また、Railsサーバー。

45
Don P

追加する必要があります

config.action_mailer.perform_deliveries = true

デフォルトではfalseであるため、開発環境からメールが送信されないようにしています...

107
Danny

Smtpを使用していない人にとっては、配信方法をsendmailに切り替えると、実行する配信を明示的に設定するのに役立ちました。

config.action_mailer.delivery_method = :sendmail
11
Aaron Krauss

コンソールからの電子メールの送信に問題がある場合は、メールでデリバーメソッドを呼び出す必要があります。

MyMailer.create_email.deliver
9
Michael Brawn

これらの答えはすべて素晴らしいものですが、特にデバッグのコンテキストでは、やけどする可能性のある別の場所があります。

development.rb必ず設定してくださいconfig.action_mailer.raise_delivery_errors = true

もしあなたの .deliverメソッドは問題なく動作しているように見えますが、実際にメールを受信することはありません。配信メソッドが例外をスローし、Railsがエラーを飲み込んでいます。資格情報の設定ミスやawsアクセス拒否APIエラーのような単純なものがあります。髪を引き裂いて保存し、raise_delivery_errors オン。何かを伝えたいが、できない。

1
Ryan Romanchuk

だから私はそれを理解しました。行ActionMailer::Base.delivery_method = :smtp in config/environment.rbオーバーライドActionMailer::Base.delivery_method = :test in config/environments/test.rb

そのため、その行を削除します、ActionMailer::Base.delivery_method = :smtp from config/environment.rbそしてconfig/environments/production.rb。これにより、ActionMailer::Base.delivery_method = :test in config/environments/test.rbおよび必要なバージョンconfig/environments/development.rbdevelopment.rb:test Fakerを使用してデータベースにデータを入力し、:smtpそのため、追加のチェックとして実際のメールが送信されたと確信しました。

注:これらの変更を有効にするには、サーバーを再起動する必要があります。

別の注意:Herokuの現在のSendGrid命令( https://devcenter.heroku.com/articles/sendgrid )SendGrid Heroku構成コードを新しいconfig/initializers/mail.rbファイル。おそらく最後の行を削除し、各config/environments/[production.rb, development.rb, test.rb]

0
DJSampat