4

我们的网络应用程序发送电子邮件。我们有很多用户,我们收到很多反弹。例如,用户更改公司,他的公司电子邮件不再有效。

为了查找退回邮件,我使用日志解析器解析 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 日志、查找导致它们的退回邮件和电子邮件的工具吗?

4

5 回答 5

8

据我所知,日志文件分析实际上只对检测在 SMTP 会话级别被拒绝的邮件有用。在远程 MTA 接受要传递的消息但随后未能传递之后发生的退回怎么办?

我们使用以下设置来检测和分类交付到远程 MTA 后的所有退回邮件。

  1. 所有外发邮件都有一个唯一的返回路径标头,该标头在解码时标识收件人电子邮件地址和特定邮件。

  2. 接收返回到返回路径地址的邮件的Apache James服务器。

  3. 一个用 Java 开发并在 Apache James 中执行的自定义 mailet,它对收件人地址进行解码,将电子邮件文本发送到boogietools 退回工作室进行退回类型分类,然后将结果保存到我们的数据库中。

它工作得非常非常好。我们能够检测永久硬退回和瞬时软退回,这些退回进一步分为非常精细的退回类型,例如垃圾邮件拒绝、不在办公室回复等。

于 2009-06-08T18:31:39.187 回答
6

这篇文章正是您正在寻找的。它基于伟大的工具日志解析器

日志解析器是一个强大的通用工具,它提供对基于文本的数据(如日志文件、XML 文件和 CSV 文件)以及 Windows® 操作系统上的关键数据源(如事件日志、注册表、文件系统和 Active Directory®。您告诉 Log Parser 您需要什么信息以及您希望如何处理它。您的查询结果可以在基于文本的输出中自定义格式,或者它们可以持久保存到更专业的目标,如 SQL、SYSLOG 或图表。大多数软件旨在完成数量有限的特定任务。Log Parser 是不同的......它可以使用的方式数量仅受用户的需求和想象力的限制。世界就是您使用 Log Parser 的数据库。

于 2008-10-15T14:29:08.320 回答
1

我喜欢 logParser。当我需要解析非常特定或自定义的东西或使用正则表达式时,我会使用 biterScripting。他们实际上有一些我用来入门的示例脚本。一个在http://www.biterscripting.com/Download/SS_WebLogParser.txt

于 2008-12-31T18:16:17.480 回答
1

您不想解析日志以尝试识别退回邮件。如果您只查看日志,您将同时遇到误报和误报。

退回可能会在您交付到的服务器的下游生成。在您的传出服务器日志中,它们看起来像是成功交付。

传入日志(从空发件人到您的 VERP 编辑地址之一)中退回的原始模式匹配将不准确。有几个原因:

  • 将有延迟警告与实际的失败反弹混合在一起。
  • 大多数外出和类似的自动回复使用空发件人来防止 battlin-bots 综合症。
  • 同样,质询-响应系统(如 *spit* boxbe.com)倾向于使用空发送者。
  • 您的 VERP 发件人地址(如果每个收件人都是持久的)将被垃圾邮件发送者收集并作为垃圾邮件目标或反向散射返回。

因此,可悲的是,唯一可靠的方法是检查退回邮件本身。根据 RFC1894,它们中的大多数将具有“报告/交付状态”MIME 部分,并且根据您选择的语言,可能有库或模块可以帮助处理其他退回格式。我唯一有直接经验的是 Perl Mail::DeliveryStatus::BounceParser 模块,它运行良好。

于 2009-07-08T06:33:16.100 回答
0

我基于这篇文章的退回计数器程序,后来才发现这种方法实际上不适用于大容量发件人,因为 SMTP 日志不是按顺序排列的。在我的博客文章中有更多关于它的内容:SMTP 日志中的电子邮件退回检测以及为什么它是不可能的。

于 2009-01-26T23:58:01.327 回答