从ActionMailer输出发送到日志的电子邮件的输出,我想知道我是否可以将该输出转换为变量,以便将其存储在文件中。
Ps。我忘了提到这是在Rails 2上
答案 0 :(得分:7)
正如McStretch指出的那样,观察者是处理邮件传递的每条消息的最佳方式。但是,如果您只想捕获1或2个特殊情况,则可以执行以下操作:
假设您有一个名为MyMailer
的ActionMailer子类,以及一封名为foobar
的电子邮件,
# Rails 2.x
mail = MyMailer.create_foobar(...) # instead of MyMailer.deliver_foobar(...)
File.open('filename.txt', 'wb') {|f| f.write(mail.body) }
MyMailer.deliver(mail)
# Rails 3.x
mail = MyMailer.foobar(...) # instead of MyMailer.foobar(...).deliver
File.open('filename.txt', 'wb') {|f| f.write(mail.body) }
mail.deliver
答案 1 :(得分:2)
您可以使用ActionMailer上的register_interceptor或register_observer方法分别在发送邮件之前或之后执行操作。 ActionMailer文档声明:
Action Mailer提供了钩子 邮件观察者和拦截器方法。 这些允许您注册对象 在邮件中调用的 交货生命周期。
观察者对象必须实现 :deliver_email(message)方法 每封电子邮件都会调用一次 电子邮件发送后发送。
拦截器对象必须实现 :deliver_email(message)方法 将在电子邮件之前调用 被发送,允许你做 修改之前的电子邮件 点击送货代理商。你的对象 应该做和需要修改 直接传入 邮件::邮件实例。
这些方法中的每一个都提供了一个Mail :: Message作为参数,因此您应该能够从该对象获取所需的数据并将其保存在某处:
class MyInterceptor
def self.delivering_email(mail)
# do something before sending the email
end
end
class MyObserver
def self.delivered_email(mail)
# do something after sending the email
end
end