我想把shell脚本放在cron作业下,该作业将执行以下操作:
1) 删除Exim队列中的2天前的电子邮件,这些邮件是被退回/冻结的邮件,不会发送。脚本不能删除合法的消息,这些消息只是在等待传递。
2) 删除来自无效发件人(如null或<>)的邮件和/或发送给无效收件人nobody或<>
非常感谢。
exiqgrep
是您的朋友!您可以很容易地找到符合特定条件的队列项目,并将找到的消息id:s通过管道发送到remove命令。例如:
exiqgrep -z -o 172800 -i | xargs -r exim -Mrm
其翻译如下:找到冻结(-z)且超过两天(-o 172800)的队列项目(exiqgrep),并将其消息id:s(-i)输出到xargs,该xargs仅在获得任何输入(-r)时运行,该输入告诉exim删除(-Mrm)具有给定消息id:s的项目。
Null(或<>)发件人肯定不是无效的!反弹和其他(非)交付报告通常从空地址发送,以避免在反弹无法交付的情况下出现无限循环。然而,如果你的队列中有很多这样的东西,并且它们在那里停留很长时间(例如,如果你试图反弹从假地址发送的垃圾邮件),你当然也可以清理它们。例如:
exiqgrep -o 86400 -f '<>' -i | xargs -r exim -Mrm
其查找具有空发件人的早于一天的队列项目并将其删除。
编辑:您也可以在exim.conf中设置以下选项,以在两天后自动删除冻结反弹:
ignore_bounce_errors_after = 2d