作者:染黑就是黑米粥_343 | 来源:互联网 | 2023-05-26 15:36
我正在创建一个支持数据库的电子邮件审核系统,以便我可以跟踪电子邮件.棘手的部分是我希望能够通过邮件程序类组织这些并且还能够存储邮件程序方法的名称.
创建邮件程序拦截器或观察者来收集Mail::Message
实例中的数据并不困难,但我很好奇是否有办法捕获创建该邮件实例的类和方法名称.
如果可能的话,我宁愿不使用回调.
有任何想法吗?
1> Jared Rader..:
这就是我最终要做的事情......我希望能够以这种方式对这种做法的利弊进行一些反馈.感觉有点难看,但很容易.基本上,我包括在我的邮件程序中使用回调的功能,将类和方法名称元数据附加到Mail::Message
对象,以便在我的观察者中可以访问它.我通过在Mail::Message
对象上设置实例变量来附加它,然后发送attr_reader
到Mail::Message
类,允许我调用mail.mailer_klass
和mail.mailer_action
.
我是这样做的,因为我想Mail::Message
在交付后记录对象,这样我就能得到它发送的确切日期,并知道记录的电子邮件应该已成功发送.
邮件:
class MyMailer
观察员:
class MailAuditor
def self.delivered_email(mail)
if mail.multipart?
body = mail.html_part.decoded
else
body = mail.body.raw_source
end
Email.create!(
sender: mail.from,
recipient: mail.to,
bcc: mail.bcc,
cc: mail.cc,
subject: mail.subject,
body: body,
mailer_klass: mail.mailer_klass,
mailer_action: mail.mailer_action,
sent_at: mail.date
)
end
end
配置/初始化/ mail.rb
ActionMailer::Base.register_observer(MailAuditor)
思考?