6

内部控制器:

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 中,控制器中的 mailer 方法没有被调用,但是当从 rails 控制台调用时它可以工作。我已经为邮戳 API 和配置文件进行了所有必要的配置。唯一的事情是在rails 4.1.0中,控制器内部的邮件程序被调用,但在rails 4.2中,当从rails控制台调用时,它不起作用。究竟是什么原因实在想不通。

4

1 回答 1

6

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

随着 Active Job 和 #deliver_later ... 的引入,实例方法的调用(在邮件程序上)被推迟到调用 Deliver_now 或 Deliver_later。

查看Rails 4.2 升级指南了解更多详情。

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

PS 我在 Wildbit(邮戳的创建者)工作。请随时直接与我们联系。

于 2015-04-01T15:22:40.860 回答