【问题标题】:Best way to log ActionMailer sent emails in a database?在数据库中记录 ActionMailer 发送电子邮件的最佳方式?
【发布时间】:2011-04-17 21:38:06
【问题描述】:

我需要记录通过 ActionMailer 发送的电子邮件,而一个简单的文本文件是不够的。我需要将日志存储在 ActiveRecord 模型中。电子邮件发送性能可能会受到影响,但在这种情况下,它是最好的选择(因为之后应用程序会定期访问日志)。

我还需要记录实际发送的内容和相关的错误,而不仅仅是我的控制器传递给 ActionMailer 的内容(即可能的最低级别实现)。

config.action_mailer.logger 似乎是劫持 Rails 已经安装的机器的理想方法。但是,据我了解,Log4r 和默认的 Ruby 记录器只能输出到文本文件。

有什么建议吗?

谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 logging


    【解决方案1】:

    有两种方法可以解决您的问题,因为您还想存储邮件的内容。
    在此之前,邮件的典型内容是:

    Sent mail to 123@gmail.com
    
    From: abc@xyz.com
    To: 123@gmail.com
    Subject: Blah
    Mime-Version: 1.0
    Content-Type: text/plain; charset=utf-8
    
    Hi, yourself.
    

    概述如下

    1. 可以定期(例如一小时、一天或一周)将邮件存储在数据库中,具体取决于您想要的方式。这样您就可以将其作为后台作业运行,它将查找日志文件并提取您想要的内容。

    2. 一个更好的方法可能是,您附加一个回调函数到邮件函数,这样每当您发送邮件,即您调用传递函数时,您的回调函数被自己调用,从尾端查找日志到某个点,然后提取内容,然后将其存储在同一位置。

    回调函数可以是一个简单的 ruby​​ 脚本,它打开日志并读取其内容,然后您可以使用它并以您想要的方式存储它。

    【讨论】:

    • 我仍在争论是否使用第三方服务来发送交易电子邮件或实施您建议的选项 2。无论如何,谢谢!
    • @David:当您可以从头开始制作自己的服务时,为什么还要选择第三方服务,而且这也很容易。我认为这没有问题。
    猜你喜欢
    • 2014-10-30
    • 2013-04-28
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    • 2011-09-08
    • 2012-09-20
    • 1970-01-01
    相关资源
    最近更新 更多