バックグラウンド
Amazon EC2 の Ubuntu インスタンスで実行されている Rails 3.2.x での ActionMailer の Gmail セットアップに関する問題を解決しようとしています。アプリケーションは Nginx + Passenger で実行されています。
セットアップは次のとおりです
ファイル: config/environments/production.rb
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => "gmail.com",
:authentication => :plain,
:user_name => "<username>@gmail.com",
:password => "<secret-word>",
:enable_starttls_auto => true
}
電子メールは、Web ログインで検証され、テスト メッセージを送信する Google アカウントで機能しています。
コントローラーは、次のようなメソッドを介して送信を開始します。
email_list_controller.rb
def email_test_send
@email = params[:email]
@message = Message.find(params[:id])
@member = Member.find_by_last_name("Bloggs")
MemberMailer.delay.all_member_email(@member.email, @message)
redirect_to messages_path, :notice => "Test Email has been sent."
end
次のように定義された MemberMailer クラスを使用します。
class MemberMailer < ActionMailer::Base
default from: "blah@gmail.com"
default cc: "blah1@gmail.com, blah2@gmail.com"
default content_type: "text/html"
# send a message to member
def all_member_email(email, message)
@message = message
mail(:to => email, :subject => message.subject)
end
終わり
システムは、バックグラウンド処理に Delayed_Job Gem を使用しており、送信はバックグラウンド ジョブ処理ありとなしの両方でテストされています。;
結果
問題は、メッセージが送信されず、次のようになることです
production.log に出力 (log_level を DEBUG に設定)
HTMLパラメータとしてのEmailListController#email_test_sendによる処理: {"utf8"=>"✓", "authenticity_token"=>"D5ZCb+Ha63WbPmd47/1/P3rpFJFiSbnrYya+YaSmBic=", "email"=>"blah@gmail.com", "commit"=>"Submit", "id"=>"1", "method"=>"post"}
メッセージが配信されない
Google アカウントの送信済みフォルダーに、送信メッセージの詳細が表示されません。
EC2 上のサーバーがtelnet 587経由で Google SMTP サーバーに接続できることを確認しました
Rails 3 で ActionMailer を使用するための Gmail アカウントの設定など、StackOverflow に関するその他の質問を調査しました。
delayed_jobs テーブルのデータベースに障害はありません。
他の分野を見るために立ち往生していますか?サーバーを再起動して、構成ファイルなどを確実にロードしようとしましたが、うまくいきませんでした。