所有邮件似乎都被忽略了(邮件没有在开发或分期中生成)

时间:2015-01-27 18:59:02

标签: ruby-on-rails ruby email ruby-on-rails-4 actionmailer

我一直在努力将我们的应用程序从Rails 3.2升级到4.2。由于我在浏览器中进行了一些测试,我注意到在开发中我的浏览器中没有通过letter_opener gem生成电子邮件,并且在暂存中没有发送任何电子邮件。我在测试时开始观察控制台日志,发现邮件模板甚至没有生成。没有错误。当我切换回我的主分支(使用Rails 3)时,一切正常。这就像我的邮件被忽略了。

例如,User模型的send_welcome_email回调如下所示:

# user.rb

after_create :send_welcome_email

def send_welcome_email
  if self.email
    CustomerMailer.welcome(self.id)
  end
end

welcome方法如下所示:

# customer_mailer.rb

  def welcome(user_id)
    @user = User.find(user_id)
    msg = mail(subject: "Welcome to Sweeps!",
              to: @user.email,
              tag: 'customer welcome')
    msg.deliver  # also tried .deliver_now
  end

如果我将binding.pry放在CustomerMailer.welcome方法中,我就不会像我期望的那样在日志中得到控制台提示,这就是我认为邮件被完全忽略的原因。

以下是我的环境的邮件设置:

# development.rb

  config.action_mailer.raise_delivery_errors = false
  config.action_mailer.default_url_options = { host: 'localhost:3000' }
  config.action_mailer.asset_host = "http://localhost:3000"
  config.action_mailer.perform_deliveries = true
  config.action_mailer.delivery_method = :letter_opener

# staging.rb

  config.action_mailer.delivery_method = :mandrill
  config.action_mailer.default_url_options = { :host => 'staging.myapp.com' }
  config.action_mailer.asset_host = "http://staging.myapp.com"
  config.action_mailer.raise_delivery_errors = true

1 个答案:

答案 0 :(得分:1)

根据the doc,您可能只是缺少要求邮件程序使用deliver_nowdeliver_later实际发送邮件。这应该被称为邮件程序类的外部,用于调用邮件程序方法。

# user.rb

after_create :send_welcome_email

def send_welcome_email
  if self.email
    CustomerMailer.welcome(self.id).deliver_now
  end
end