检查邮件是否已到达,如果没有则发出警报

检查邮件是否已到达,如果没有则发出警报

我将 fetchmail 与 procmail 结合使用,在 CentOS 上进行邮件过滤,其中我的邮件包含各种日志消息。他们为我服务,这样我就可以在我的邮件(日志)中搜索错误字符串。那么有谁知道我如何检查一封邮件是否丢失,因为我每天都有固定数量的邮件发送给我,如果服务器崩溃显然它不会发送邮件,我如何确定邮件是否丢失缺少,是否要通过电子邮件发送警报?

当我使用 fetchmail 获取邮件并使用 procmail 处理它时,我需要查看procmail.log文件,以便确定某封邮件是否尚未到达。我的日志文件如下所示:

From [email protected]  Wed Dec 31 10:38:49 2014
 Subject: example1 -> Incremental 1 -> DEV backup
  Folder: /dev/null                                                      235603
From [email protected]  Wed Dec 31 10:38:50 2014
 Subject: example2
  Folder: /dev/null                                                        5983
From [email protected]  Wed Dec 31 10:38:50 2014
 Subject: example3 -> Full Offline Backup DEV
  Folder: /dev/null                                                       40978
From [email protected]  Wed Dec 31 10:38:50 2014
 Subject: [OK] [ example4]
  Folder: /dev/null

因此,这些邮件是在一天内收到的,并且它们必须在某个时间到达,当我需要检查每封邮件是否已到达(存在于日志文件中)时。现在我需要一种方法来查看日志中是否存在这些邮件。并且可以仅通过 from 行进行搜索。

答案1

您可以运行某种定期日志分析器来验证您是否已收到您期望收到的所有内容。也许是这样的。

awk 'BEGIN {
      e="[email protected]:[email protected]:[email protected]:[email protected]";
      split(e, expected, /:/) }
  /^From / { seen[$2]++ }
  END { for (x in expected) if (!(expected[x] in seen)) print expected[x] " missing" }
  ' Mail/procmail.log

确保您拥有要检查的时间段(过去 24 小时?)的日志,并将其传递给此脚本。如果其中一条“预期”记录丢失,它将发出警报。

该脚本只是查找每个From日志行的第二个字段并将其提取到seen.最后,如果存在expected不在 中的记录seen,则为每条记录发出警报消息。

crontab如果脚本生成任何输出,您可以运行此命令,以便将电子邮件发送给您。将其与日志轮换脚本结合运行是有意义的,以便您同时归档和处理最新的日志文件(至少大致如此)。那么就不需要解析日志文件中的时间戳等;此日志文件中的所有内容都是您感兴趣的时间段内的内容。

答案2

结帐 www.smtpviewer.com。将您期望的电子邮件副本发送到此站点,如果在特定时间段内未收到该电子邮件,它会向您发出警告。如果您希望每 24 小时收到一封电子邮件,则假设为 24 小时。如果电子邮件的主题或正文中包含特定关键字,它还可以向您发出警告。

相关内容