これは以前に何百万回も質問されていたと思いますが、自分に合ったものが見つからないので、もう一度質問します!
Rails 3.でActionMailerを使用して電子メールを送信する方法が必要です。新しいActionMailerのRailscastsチュートリアルを含む多数のチュートリアルを実行しましたが、生成されるメールを確認できますが、受信しませんそれら。
私はさまざまな方法を試しましたが、一般的に次の設定を構成することになります
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:port => "587",
:domain => "gmail.com",
:user_name => "[email protected]",
:password => "yyy",
:authentication => "plain",
:enable_starttls_auto => true
}
私はconfig/environment.rb、config/environments/development.rbで上記のコードを(もちろん有効なgmailの詳細とともに)試してみましたが、現在は独自のイニシャライザーconfig/initialisers/setup_mail.rbにあります
また、GmailやSendgridを含むいくつかの異なるsmtpサーバーを試し、それに応じてsmtp設定を調整しましたが、それでも何もしませんでした。ターミナルと開発ログでメールを見ることができます。
ActionMailerが動作するためにセットアップする必要がある、私が見逃したかもしれない他の落とし穴を誰もが知っていますか?それに失敗すると、メールが送信されない理由に関する詳細情報を取得する方法がありますか?私が持っています
config.action_mailer.raise_delivery_errors = true
config/development.rbで設定しますが、開発ログには、端末で表示されるものと同じものが表示されます。
価値のあるものとして、Ubuntu 10.04ラップトップで開発を行っています。念のため、特別なセットアップが必要な場合があります。
どうもありがとう
まあ私は問題を解決しましたが、なぜこれが機能し、他の方法が機能しなかったのか、わかりません。
解決策は、config/initialisers/setup_mail.rbに以下を含む初期化子を作成することでした
if Rails.env != 'test'
email_settings = YAML::load(File.open("#{Rails.root.to_s}/config/email.yml"))
ActionMailer::Base.smtp_settings = email_settings[Rails.env] unless email_settings[Rails.env].nil?
end
次に、devおよびproductionメールアカウントの詳細を含むconfig/email.ymlを追加しました
development:
:address: smtp.gmail.com
:port: 587
:authentication: plain
:user_name: xxx
:password: yyy
:enable_starttls_auto: true
production:
:address: smtp.gmail.com
:port: 587
:authentication: plain
:user_name: xxx
:password: yyy
:enable_starttls_auto: true
私が言ったように、理由はわかりませんが、これでうまくいくようです。ポインタをありがとう
config/environments/development.rb
には次のものがあります
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
実際のメール設定、config.actionmailer.*
iはconfig\application.rb
に配置されています。
お役に立てれば :)
三つの事。
最初に、ポートは整数であり、最初の例のように引用符を必要としません。 (しかし、文字列はまだ機能するはずです。)
次に、この(または任意の)初期化ファイルを変更するたびにサーバーを再起動することを忘れないでください。これにより、追加後にエラーが表示されなかった理由を説明できます。
config.action_mailer.raise_delivery_errors = true
そのエラーメッセージがなければ、メールが送信されなかった理由を特定することは困難ですが、今はそうです。 1つの可能性は、パスワードを二重引用符で囲むことです。強力なパスワードを使用しており、パスワードにエスケープされていないトークンが含まれていた場合、再解釈された可能性があります。 (つまり、"P@ssw\0rd"
はP@ssrd
になります)。まさにこの理由で、構文上の砂糖が特に必要でない限り、コードでは常に単一引用符を使用します。
最後に、enable_starttls_auto: true
がデフォルトであり、不要です。
ActionMailer::Base.delivery_method = :sendmail
およびconfig.action_mailer.perform_deliveries = true
この問題を解決するのに必要な2つのステップでした
すべての構成をconfig/environments/development.rbに置くだけ
というのは
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:port => "587",
:domain => "gmail.com",
:user_name => "[email protected]",
:password => "yyy",
:authentication => "plain",
:enable_starttls_auto => true
}
そして
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
それは私のために働いた。
私の2ペニーの価値:
Rails 5.1:と同じ症状がありました。5.1:何も起こりませんでした。development.rb
ファイルの設定はまったく無視されました...
それから私はマシンを再起動することを思い出した!(問題を魔法のように解決した)
これは、以前のいくつかのコメントで指摘されていました。
ただし、この動作は想定されていないため、問題は複雑です。私の見解では、development.rb
のデフォルトのコメントは、この点で誤解を招きます。
# In the development environment your application's code is reloaded on
# every request. This slows down response time but is perfect for development
# since *you don't have to restart the web server when you make code changes*.
さらに、Gmailユーザー名はエイリアスされません。