3

背景

尝试解决在 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 进行后台处理,并且无论有无后台作业处理,都已对发送进行了测试。

结果

问题是没有消息发送,出现以下情况

  1. 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"}

  2. 没有消息被传递

  3. Google 帐户已发送文件夹不显示任何出站邮件详细信息。

  4. 验证 EC2 上的服务器可以通过telnet 587连接到 Google SMTP 服务器

  5. 调查了其他 StackOverflow 问题,例如在 Rails 3 中设置 Gmail 帐户以使用 ActionMailer

  6. delay_jobs 表中的数据库中没有故障。

所以卡在任何其他领域看?我尝试重新启动服务器以确保干净加载配置文件等,但没有运气。

4

1 回答 1

0

确保在以下位置设置这两个选项config/environments/production.rb

config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
于 2013-11-15T05:25:49.257 回答