Ruby on rails 如何让ActionMailer记录发送的邮件,但不包括附件?
我喜欢Rails自动记录应用程序发送的所有消息。我不喜欢的是它如何用大量无用的Base64编码文本填充我的日志文件。这使得查看日志文件非常痛苦,因为我必须跳过这些兆字节长的无法读取的噪声块。它还会导致日志文件增长过快,并填满磁盘 我如何让它仍然记录所有发送的邮件,但不包括任何附件?有没有办法告诉it部门在登录之前删除附件 通常我所感兴趣的是标题(主题,它被发送给了谁)和(至少在某些时候)消息正文文本Ruby on rails 如何让ActionMailer记录发送的邮件,但不包括附件?,ruby-on-rails,logging,ruby-on-rails-3.2,actionmailer,Ruby On Rails,Logging,Ruby On Rails 3.2,Actionmailer,我喜欢Rails自动记录应用程序发送的所有消息。我不喜欢的是它如何用大量无用的Base64编码文本填充我的日志文件。这使得查看日志文件非常痛苦,因为我必须跳过这些兆字节长的无法读取的噪声块。它还会导致日志文件增长过快,并填满磁盘 我如何让它仍然记录所有发送的邮件,但不包括任何附件?有没有办法告诉it部门在登录之前删除附件 通常我所感兴趣的是标题(主题,它被发送给了谁)和(至少在某些时候)消息正文文本 还有一个附件列表(文件名和类型)也没什么坏处,但看到所有附件的完整Base64转储肯定对我没有好
还有一个附件列表(文件名和类型)也没什么坏处,但看到所有附件的完整Base64转储肯定对我没有好处!(如果我想检查附件是否正常发送,我已经知道如何添加邮件拦截器,将密件抄送的所有邮件发送到我的收件箱。)邮件正文的日志记录在此处处理:
模块ActionMailer
类LogSubscriber
如果要完全排除邮件正文,可以将日志级别更改为排除“调试”。否则,您唯一的选择就是重写此方法并执行您自己的操作
不幸的是,event.payload[:mail]
是一个字符串。删除附件可能会很混乱。用正则表达式只显示标题并不难。否则,您需要从该字符串重新创建邮件对象并提取所需内容
另一个选项是更改ActionMailer使用的记录器,使其记录到自己的文件中。这至少可以保持标准Rails日志的干净
最后,我让它记录了每封发出的邮件的以下详细信息:
mail.without_附件代码>,以及
mail.header.encoded
mail.inspect\u结构的输出(来自)
部件的结果。已解码
请查看整个内容。谢谢您的回答!很多好建议!我想使用Regexp只显示标题不会太糟糕。。。虽然我会尝试更多,让它也包括文本和html正文。确认,太糟糕了
事件。有效负载[:mail]
是一个字符串。如果我无论如何都要重写一个方法,我想知道,仅仅重写添加有效负载的方法(ActionMailer::Base.set_payload_for_mail
)会更糟糕吗?现在就开始研究这个问题,如果我能让它工作,我会发布我的解决方案。。。
module ActionMailer
class LogSubscriber < ActiveSupport::LogSubscriber
def deliver(event)
info do
recipients = Array(event.payload[:to]).join(', ')
"\nSent mail to #{recipients} (#{event.duration.round(1)}ms)"
end
debug { event.payload[:mail] }
end
# ... more methods ...
end
end
payload[:mail] = mail.encoded