我喜欢 Rails 自动记录从应用程序发出的所有消息。我不喜欢的是它如何用大量无用的 Base64 编码文本填满我的日志文件。这使得查看日志文件变得很痛苦,因为我必须跳过这些兆字节长的不可读噪音 block 。它还会导致日志文件增长过快并填满磁盘。
如何让它仍然记录所有已发送但不包含任何附件的邮件?有没有办法告诉它在登录之前删除附件?
通常我感兴趣的是标题(主题、发送给谁)和(至少在某些时候)邮件正文。
如果也有一个附件(文件名和类型)的列表 也没什么坏处——但是看到所有附件的完整 Base64 转储肯定对我没有好处! (如果我想检查附件是否正常通过,我已经知道如何添加一个邮件拦截器,将所有外发邮件密件抄送到我的收件箱。)
最佳答案
我最终让它记录了每封发出的邮件的以下详细信息:
- 标题
- 电子邮件的结构(哪些部分包含在哪些其他部分中),包括附件列表,然后删除所有内容 附件
- 经过解码、人类可读、可搜索的消息体(Rails 默认记录编码,这对于人类来说很难阅读 并在随机位置打断单词,使其难以搜索)
为了完成这个,我覆盖了 ActionMailer::Base.set_payload_for_mail
在我的应用程序中替换了 this line :
payload[:mail] = mail.encoded
版本:
- 创建邮件对象的副本
- 调用
mail.without_attachments!
和 仅日志:
mail.header.encoded
mail.inspect_structure
的输出(来自 my fork )- 为每个(非附件)部分调用
part.decoded
的结果。
看看这个 gist对于整个事情。
关于ruby-on-rails - 如何让 ActionMailer 记录已发送的消息但不包含附件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28776785/