用于解析发现退回邮件的 SMTP 日志的工具
Posted
技术标签:
【中文标题】用于解析发现退回邮件的 SMTP 日志的工具【英文标题】:Tool for parsing SMTP logs that finds bounces 【发布时间】:2010-09-17 07:44:09 【问题描述】:我们的网络应用程序发送电子邮件。我们有很多用户,我们得到了很多反弹。例如,用户更改公司,他的公司电子邮件不再有效。
为了查找退回邮件,我使用日志解析器解析 SMTP 日志文件。日志来自 Microsoft SMTP 服务器。
有些反弹很棒,例如550+#5.1.0+Address+rejected+user@domain.com
。弹跳中有user@domain.com
。
但有些错误消息中没有电子邮件,例如550+No+such+recipient
。
我创建了一个简单的 Ruby 脚本来解析日志(使用日志解析器)来查找是哪封邮件导致了类似550+No+such+recipient
的问题。
我很惊讶我找不到可以做到这一点的工具。我找到了像 Zabbix 和 Splunk 这样的工具来进行日志分析,但对于这样简单的任务来说,它们看起来有点过头了。
有人知道一种工具可以解析 SMTP 日志、查找退回邮件和导致退回邮件的电子邮件吗?
【问题讨论】:
什么 SMTP 服务器。没有一致的格式 对不起,我不知道这是否相关。微软 smtp 服务器。编辑了帖子。 【参考方案1】:据我所知,日志文件分析实际上只对检测在 SMTP 会话级别被拒绝的邮件有用。在远程 MTA 接受要传递的消息但随后未能传递之后发生的退回怎么办?
我们使用以下设置来检测和分类所有在传送到远程 MTA 后的反弹。
所有外发邮件都有一个unique return-path header,解码后可识别收件人电子邮件地址和特定邮件。
Apache James 服务器接收返回到返回路径地址的邮件。
一个用 Java 开发并在 Apache James 中执行的自定义 mailet,它对收件人地址进行解码,将电子邮件文本发送到 boogietools bounce studio 以进行退回类型分类,然后将结果保存到我们的数据库中。
它工作得非常非常好。我们能够检测永久硬退回和瞬时软退回,这些退回进一步分为非常精细的退回类型,例如垃圾邮件拒绝、不在办公室回复等。
【讨论】:
拥有唯一的返回路径是这里的重要部分 en.wikipedia.org/wiki/Variable_envelope_return_pathVERP 已经内置在很多产品中,尽管它只提供捕获原始目标地址,而不是捕获失败的特定电子邮件。【参考方案2】:这个article 正是您要找的。它基于伟大的工具log parser。
日志解析器是一个功能强大、用途广泛的 提供通用查询的工具 访问基于文本的数据,例如日志 文件、XML 文件和 CSV 文件,如 以及关键数据源 Windows® 操作系统,例如 事件日志、注册表、文件 系统和 Active Directory®。你 告诉 Log Parser 你有什么信息 需要以及您希望如何处理它。 您的查询结果可以是 在基于文本的输出中自定义格式, 或者他们可以坚持到更多 特殊目标,如 SQL、SYSLOG 或 图表。大多数软件旨在 完成有限数量的 具体任务。日志解析器是 不同......它可以的方式数量 使用仅受需求限制 和用户的想象力。这 world 是您的数据库,带有 Log 解析器。
【讨论】:
谢谢,很高兴看到我不是唯一一个从日志文件中解析反弹的人。我对我的 ruby 脚本做了类似的事情(它也使用日志解析器来解析日志)。【参考方案3】:您不想解析日志来尝试识别退回邮件。如果您只查看日志,您将同时遇到误报和误报。
退回邮件可能会在您交付到的服务器的下游生成。在您的传出服务器日志中,它们看起来像是成功交付。
传入日志(从空发件人到您的 VERP 编辑地址之一)中退回的原始模式匹配将不准确。有几个原因:
会有延迟警告与实际的故障反弹混合在一起。 大多数外出和类似的自动回复使用空发件人来防止 battlin-bots 综合症。 同样,质询-响应系统(如 *spit* boxbe.com)倾向于使用空发件人。 您的 VERP 发件人地址(如果每个收件人都是持久的)将被垃圾邮件发送者收集并作为垃圾邮件目标或反向散射返回。因此,遗憾的是,唯一可靠的方法是检查退回邮件本身。根据 RFC1894,它们中的大多数将具有“报告/交付状态”MIME 部分,并且根据您选择的语言,可能有库或模块可以帮助处理其他退回格式。我唯一有直接经验的是 Perl Mail::DeliveryStatus::BounceParser 模块,它运行良好。
【讨论】:
【参考方案4】:我喜欢 logParser。当我需要解析非常特定或自定义的东西或使用正则表达式时,我使用 biterScripting。他们实际上有一些我用来入门的示例脚本。一个是http://www.biterscripting.com/Download/SS_WebLogParser.txt。
【讨论】:
【参考方案5】:我根据这篇文章创建了一个退回计数器程序,但后来发现这种方法实际上不适用于大量发件人,因为 SMTP 日志不是按顺序排列的。在我的博文中有更多关于它的信息:Email Bounce Detection in SMTP Logs and Why It Is Impossible。
【讨论】:
以上是关于用于解析发现退回邮件的 SMTP 日志的工具的主要内容,如果未能解决你的问题,请参考以下文章
csharp 用C#编写的简单SMTP邮件客户端助手类,用于异步发送电子邮件。注意:使用Log4Net进行日志记录。
通过邮件 gem 发送 smtp 电子邮件会导致 554 5.7.0 Reject