如何生成触发特定 NDR 的所有邮件的报告

如何生成触发特定 NDR 的所有邮件的报告

CENTOS 5.x | Sendmail

大家好,

我希望这是一个简单的问题。=) 我需要生成触发特定 DSN 代码的消息的报告摘要。例如:

Jan 11 07:43:34 server-example sendmail[12732]: p937blksdh3: to=<[email protected]>, delay=00:00:00, xdelay=00:00:00, mailer=esmtp, pri=102537, relay=mta.recipientdomain.com. [12.34.56.78], dsn=5.7.1, stat=Service unavailable

通常情况下,我只会 grep 这些信息(类似于:grep -i “dsn=5.7.1” /var/log/maillog)。但问题是,这只会返回像上面那样的一行,而不会告诉我消息的发件人。

理想情况下,我正在寻找可以执行以下操作的一行程序:

  1. 在 sendmail 邮件日志中搜索特定的 DSN。
  2. 识别电子邮件的消息 ID。(我猜awk'{打印$}'会被使用吗?
  3. 返回每个消息的详细信息(大概是从步骤 2 中检索到的消息 ID)。

我是脚本/单行程序方面的新手,所以我确信可能有更简单的方法可以做到这一点。有什么想法吗?

谢谢,

-M

答案1

以下将搜索您的 dsn,如果它匹配 dsn=5.7.1,它将打印 msg-id 和发件人:

awk '{if($13 ~ /dsn\=5\.7\.1/)print $11 $7}' < /var/log/maillog

我不太确定除了 msg-id 和 sender 之外您想要提取什么具体数据,但您可以print $11 $7通过手动计算空格分隔的字段来切换字段($11 $7)以选择您想要的内容。

这就是你所追求的吗?

埃里克

答案2

效率不高(对日志文件进行了 2 次扫描),但应该可以解决问题:

awk '/dsn=5.7.1/ {print $6}' /var/log/maillog|while 读取 ID;执行 awk "/$ID.*from=/ {print \$7}" /var/log/maillig;完成

相关内容