ActionMailer-访问Mail :: Message内容,还是手动初始化控制器中的视图?

时间:2015-08-31 12:49:32

标签: ruby-on-rails actionmailer delayed-job

我有一个表单,内部用户可以请求将信息材料发送给客户。提交表单后,它会向负责将物料邮寄给客户的人员发送电子邮件。

现在,我想捕获电子邮件的内容,以便我可以在客户的节目页面添加注释,而我不确定如何去做。

我看过的一个选项是在after_filter中使用MaterialsRequestMailer,但是调用message.body会返回一个大字符串,其中的文字比我需要的更多,我想避免添加一堆解析逻辑来获取消息内容。

基本上,我想要views/materials_request_mailer/send_request_notification.text.erb模板生成的内容。我查看了http://www.rubydoc.info/github/mikel/mail/Mail/Message,但找不到只返回渲染模板内容的方法。有没有办法做到这一点?

如果没有,有没有办法手动初始化控制器中的View,我已经有了传递给邮件程序的实例变量?这似乎不是一个理想的解决方案,因为我正在使用DelayedJob,并且在实际发送电子邮件之前会运行添加注释的代码。此外,由于DelayedJob,我似乎无法直接从控制器中访问邮件对象(如果我mail = MaterialsRequestMailer.delay.send_request_notification(...)它将Delayed::Backend::ActiveRecord::Job的实例分配给mail })。

1 个答案:

答案 0 :(得分:1)

找到一个有效的解决方案 - message.text_part.body.raw_source正是我所寻求的。 (相信这个答案:https://stackoverflow.com/a/15257098/2599738

class MaterialsRequestMailer < ActionMailer::Base
  include AbstractController::Callbacks

  after_filter :add_note_to_client

  def send_request_notification(client, ...)
    @client = client
    ...
  end

  def add_note_to_client
    mail_text = message.text_part.body.raw_source
    @client.add_account_note(mail_text)
  end
end