gpt4 book ai didi

ruby-on-rails - 在 Rails 中发送电子邮件后存储邮件程序类和方法

转载 作者:数据小太阳 更新时间:2023-10-29 06:57:50 24 4
gpt4 key购买 nike

我正致力于创建一个数据库支持的电子邮件审计系统,以便我可以跟踪电子邮件信息。棘手的部分是我希望能够通过邮件程序类来组织这些,并且还能够存储邮件程序方法的名称。

创建邮件程序拦截器或观察器以从 Mail::Message 实例收集数据并不难,但我很好奇是否有办法捕获创建的类和方法名称该消息的实例。

如果可能的话,我宁愿不使用回调。

有什么想法吗?

最佳答案

这就是我最终要做的……我希望得到一些关于这样做的利弊的反馈。对我来说感觉有点丑陋,但这很容易。基本上,我在我的邮件程序中加入了使用回调的功能,将类和方法名称元数据附加到 Mail::Message 对象,以便我的观察者可以访问它。我通过在 Mail::Message 对象上设置实例变量来附加它,然后将 attr_reader 发送到 Mail::Message 类,允许我调用 mail.mailer_klassmail.mailer_action

我这样做是因为我想在发送后记录 Mail::Message 对象,这样我就可以得到发送的确切日期,并知道记录的电子邮件应该有发送成功。

邮寄者:

class MyMailer < ActionMailer::Base
default from: "noreply@theapp.com"

include AbstractController::Callbacks

# Where I attach the class and method
after_action :attach_metadata

def welcome_note(user)
@user = user

mail(subject: "Thanks for signing up!", to: @user.email)
end

private

def attach_metadata
mailer_klass = self.class.to_s
mailer_action = self.action_name

self.message.instance_variable_set(:@mailer_klass, mailer_klass)
self.message.instance_variable_set(:@mailer_action, mailer_action)

self.message.class.send(:attr_reader, :mailer_klass)
self.message.class.send(:attr_reader, :mailer_action)
end
end

观察者:

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)

想法?

关于ruby-on-rails - 在 Rails 中发送电子邮件后存储邮件程序类和方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27974912/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com