从ActionMailer发送的电子邮件的输出输出到日志中,我想知道是否可以将该输出获取到变量中,以便我可以存储它在一个文件中。如何在Rails中捕获电子邮件的输出并将其放入变量
Ps。我忘了提及这是Rails 2
从ActionMailer发送的电子邮件的输出输出到日志中,我想知道是否可以将该输出获取到变量中,以便我可以存储它在一个文件中。如何在Rails中捕获电子邮件的输出并将其放入变量
Ps。我忘了提及这是Rails 2
正如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
您可以使用ActionMailer上的register_interceptor或register_observer方法分别在发送邮件之前或之后执行某些操作。 ActionMailer文档状态:
动作邮件程序提供挂钩到 Mail观察者和拦截器方法。 这些允许您注册邮件 传递生命周期期间调用的对象 。
一个观察者对象必须实现 :这 将被用于电子邮件发送后发送每封电子邮件 一度被称为delivered_email(消息)方法。
的拦截对象必须实现 的:delivering_email(消息)方法 发送电子邮件 之前将被调用,方便用户进行 修改电子邮件它 击中投递代理之前。您的对象 应该直接将 修改为 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
我忘了提到这是在Rails 2 – concept47 2011-04-28 19:14:33
出于某种原因MyMailer.foobar正在抛出一个错误“未定义的方法foobar”MyMailer:类“...其中功能和类的名称已被改变,以保护有罪。奇怪的是,它起初工作。 – concept47 2011-04-28 21:41:50
想通了...... Rails 2版应该是'mail = MyMailer.create_foobar(...)'... – concept47 2011-04-28 21:50:19
哎呀,对不起。纠正。 – 2011-04-28 21:52:19