このメーラーがメールを送信しないのはなぜですか? (またはデバッグのアイデアはありますか?)
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サーバー。
追加する必要があります
config.action_mailer.perform_deliveries = true
デフォルトではfalseであるため、開発環境からメールが送信されないようにしています...
Smtpを使用していない人にとっては、配信方法をsendmailに切り替えると、実行する配信を明示的に設定するのに役立ちました。
config.action_mailer.delivery_method = :sendmail
コンソールからの電子メールの送信に問題がある場合は、メールでデリバーメソッドを呼び出す必要があります。
MyMailer.create_email.deliver
これらの答えはすべて素晴らしいものですが、特にデバッグのコンテキストでは、やけどする可能性のある別の場所があります。
development.rb
必ず設定してくださいconfig.action_mailer.raise_delivery_errors = true
もしあなたの .deliver
メソッドは問題なく動作しているように見えますが、実際にメールを受信することはありません。配信メソッドが例外をスローし、Railsがエラーを飲み込んでいます。資格情報の設定ミスやawsアクセス拒否APIエラーのような単純なものがあります。髪を引き裂いて保存し、raise_delivery_errors
オン。何かを伝えたいが、できない。
だから私はそれを理解しました。行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.rb
。 development.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]