Linux shell脚本从exim队列中删除2天的冻结电子邮件

时间:2014-04-15 09:06:49

标签: linux shell crontab exim mail-queue

我想将shell脚本放在cron作业下面,该作业将执行以下操作:

1)删除Exim队列中2天的电子邮件消息,这些消息将被退回/冻结,这些消息将不会被传递。脚本不得删除合法的邮件,只是等待交付时间。

2)删除来自无效发件人的邮件,例如null或<>和/或发送给无效收件人nobody或<>

非常感谢。

1 个答案:

答案 0 :(得分:4)

exiqgrep是你的朋友!您可以轻松找到符合特定条件的队列项,并将找到的message-id:s传递给remove命令。 E.g:

exiqgrep -z -o 172800 -i | xargs -r exim -Mrm 

,其翻译如下:查找冻结(-z)和超过两天(-o 172800)的队列项(exiqgrep)并将其消息ID:s(-i)输出到仅在获取任何内容时运行的xargs输入(-r)告诉exim删除(-Mrm)具有给定消息id的项目:s。

Null(或<>)发件人肯定无效!跳出和其他(非)传递报告通常从空地址发送,以避免在无法传递跳出的情况下无限循环。但是,如果您在队列中有很多这些并且他们在那里停留很长时间(例如,如果您试图反弹从虚假地址发送的垃圾邮件),您当然也可以清理它们。例如:

exiqgrep -o 86400 -f '<>' -i | xargs -r exim -Mrm

使用空发件人查找超过一天的队列项并删除它们。

编辑:您还可以在exim.conf中设置以下选项,以便在两天后自动删除冻结的跳出:

ignore_bounce_errors_after = 2d