【问题标题】:ActionMailer- access Mail::Message content, or manually initialize view in controller?ActionMailer- 访问 Mail::Message 内容,还是在控制器中手动初始化视图?
【发布时间】:2015-08-31 23:50:24
【问题描述】:

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

现在,我想捕获电子邮件的内容,以便向客户的展示页面添加注释,但我不知道该怎么做。

我看过的一个选项是在MaterialsRequestMailer 中使用after_filter,但调用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)。

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多