未调用 Mailer 方法?

Mailer method not being called?

内部控制器:

def update  
  @user.update({approved: true})  
  UserMailer.send_approved_mail(@user)  
  redirect_to(root_url)  
end  

里面user_mailer.rb

class UserMailer < Devise::Mailer  
  def send_approved_mail(user)
    @resource = user
    email_body = render "user_activated_mail"
    if @resource.valid?
     client = Postmark::ApiClient.new(ENV["POSTMARK_API_KEY"])
     client.deliver(from: ENV["POSTMARK_SIGNATURE"], 
      to: @resource.email, subject: "User Activation information.", 
      tag: 'account-activated', :content_type => "text/html",
      html_body: email_body)
    end
  end
end  

在 rails 4.1.0 中调用控制器中的上述方法并发送电子邮件,但在 rails 4.2 中未调用控制器中的邮件程序方法,但在从 rails 控制台它工作。我已经为邮戳 api 和配置文件进行了所有必要的配置。唯一的事情是在 rails 4.1.0 中控制器内部的邮件程序被调用,但在 rails 4.2 中它不会但在从 rails 控制台调用时起作用。具体是什么原因实在想不通

您在此处注意到的行为是 Rails 4.2 中引入的新默认行为:

With the introduction of Active Job and #deliver_later ... the invocation of the instance methods (on a mailer) is deferred until either deliver_now or deliver_later is called.

查看 Rails 4.2 upgrade guide 了解更多详情。

不过别担心。您仍然可以将 Postmark 与 ActionMailer 一起使用。 official Postmark Rails gem 提供与 ActionMailer for Postmark 的直接集成。通过使用它,您应该能够像编写常规 Rails 邮件程序一样编写邮件程序,而无需在代码中手动管理 Postmark 连接。

P.S。我在 Wildbit(Postmark 的创建者)工作。欢迎随时直接联系我们。