ruby-on-rails - 如何让 ActionMailer 记录已发送的消息但不包含附件?

标签 ruby-on-rails logging ruby-on-rails-3.2 actionmailer

我喜欢 Rails 自动记录从应用程序发出的所有消息。我喜欢的是它如何用大量无用的 Base64 编码文本填满我的日志文件。这使得查看日志文件变得很痛苦,因为我必须跳过这些兆字节长的不可读噪音 block 。它还会导致日志文件增长过快并填满磁盘。

如何让它仍然记录所有已发送但不包含任何附件的邮件?有没有办法告诉它在登录之前删除附件?

通常我感兴趣的是标题(主题、发送给谁)和(至少在某些时候)邮件正文。

如果也有一个附件(文件名和类型)的列表 也没什么坏处——但是看到所有附件的完整 Base64 转储肯定对我没有好处! (如果我想检查附件是否正常通过,我已经知道如何添加一个邮件拦截器,将所有外发邮件密件抄送到我的收件箱。)

最佳答案

我最终让它记录了每封发出的邮件的以下详细信息:

  1. 标题
  2. 电子邮件的结构(哪些部分包含在哪些其他部分中),包括附件列表,然后删除所有内容 附件
  3. 经过解码、人类可读、可搜索的消息体(Rails 默认记录编码,这对于人类来说很难阅读 并在随机位置打断单词,使其难以搜索)

为了完成这个,我覆盖了 ActionMailer::Base.set_payload_for_mail在我的应用程序中替换了 this line :

payload[:mail]       = mail.encoded

版本:

  1. 创建邮件对象的副本
  2. 调用 mail.without_attachments!
  3. 仅日志:

    1. mail.header.encoded
    2. mail.inspect_structure 的输出(来自 my fork )
    3. 为每个(非附件)部分调用 part.decoded 的结果。

看看这个 gist对于整个事情。

关于ruby-on-rails - 如何让 ActionMailer 记录已发送的消息但不包含附件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28776785/

相关文章:

jquery - 使用 Rails 3 保存或更新模型时刷新 div

ruby-on-rails - Rails 国际化 (i18n) : Everything translating except layouts/application. html.erb

ruby-on-rails - 无方法错误 : undefined method `from_json' for "{}":String

python - 队列消费者打印与日志记录

java - Log4java zip 压缩问题 : All file appenders are the same but compression only works for some of them

mongodb - PostgreSQL 相当于 MongoDB 中的 Oplog Tailing

ruby-on-rails - 像github一样的Rails路由

ruby-on-rails - 删除 ruby​​ 字符串中的 <br> 行

ruby-on-rails - 法拉第 gem 未定义方法 'bytesize' =' for Hash`

javascript - 在rails3.1rc5中使用enter通过ajax提交textarea中的内容