背景
尝试解决在 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
}
电子邮件正在使用 Google 帐户,已通过 Web 登录验证并发送测试消息。
控制器通过以下方法启动发送:
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 中的输出(在 DEBUG 处设置 log_level
EmailListController#email_test_send 作为 HTML 参数处理:{"utf8"=>"✓", "authenticity_token"=>"D5ZCb+Ha63WbPmd47/1/P3rpFJFiSbnrYya+YaSmBic=", "email"=>"blah@gmail.com", "commit"=>"提交", "id"=>"1", "method"=>"post"}
没有消息被传递
Google 帐户已发送文件夹不显示任何出站邮件详细信息。
验证 EC2 上的服务器可以通过telnet 587连接到 Google SMTP 服务器
调查了其他 StackOverflow 问题,例如在 Rails 3 中设置 Gmail 帐户以使用 ActionMailer
delay_jobs 表中的数据库中没有故障。
所以卡在任何其他领域看?我尝试重新启动服务器以确保干净加载配置文件等,但没有运气。