Ruby on rails Rails,如何在每次发送电子邮件时保存db表日志

Ruby on rails Rails,如何在每次发送电子邮件时保存db表日志,ruby-on-rails,ruby-on-rails-3,actionmailer,Ruby On Rails,Ruby On Rails 3,Actionmailer,我的应用程序有一个UserMailer和几个mailer方法,其中大多数是通过延迟作业发送的 我想要的是一个DB表,它会在每次发送邮件时创建一条记录。应用程序使用sendgrid进行发送,但我不完全信任sendgrid,希望在应用程序上保留一条记录以进行调试 是否有一种高级方法可以全局捕获邮件发出的时间,并将其记录在数据库中,而不必强制向EverMailer方法添加逻辑 谢谢我通过使用电子邮件模型解决了这个问题,该模型带有“to”和“guid”字符串字段 def self.deliver(whi

我的应用程序有一个UserMailer和几个mailer方法,其中大多数是通过延迟作业发送的

我想要的是一个DB表,它会在每次发送邮件时创建一条记录。应用程序使用sendgrid进行发送,但我不完全信任sendgrid,希望在应用程序上保留一条记录以进行调试

是否有一种高级方法可以全局捕获邮件发出的时间,并将其记录在数据库中,而不必强制向EverMailer方法添加逻辑


谢谢

我通过使用电子邮件模型解决了这个问题,该模型带有“to”和“guid”字符串字段

def self.deliver(which, to, guid, *args)
  transaction do
    if self.where(:email => to, :guid => guid).first.nil?
      if record = Email.create(:email => to, :guid => guid, :template => which) and !record.new_record?
        Mailer.send("deliver_#{which}", to, *args)
      end
    end
  end
end
这是针对Rails2.3Mailer的,因此Rails3的调用会有点不同,但核心概念仍然适用。您将调用以下命令,而不是直接调用邮件程序:

Email.deliver(email_name, receipient, some_guid_you_generate_for_this_email, *args_to_be_sent_to_mailer)

这将检查数据库,以确保您不会将同一封电子邮件重新发送到给定的地址,并将保留所有已发送电子邮件的记录,您可以在将来进行检查。

谢谢,但我希望更多的观察者概念,以免被迫破解标准邮件传递方法。