我有一个表单,内部用户可以请求将信息材料发送给客户。提交表单后,它会向负责将物料邮寄给客户的人员发送电子邮件。
现在,我想捕获电子邮件的内容,以便我可以在客户的节目页面添加注释,而我不确定如何去做。
我看过的一个选项是在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
})。
答案 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