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

Bes*_*sik 1 linux shell exim crontab mail-queue

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

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

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

非常感谢。

kri*_*sku 5

exiqgrep是你的朋友!您可以轻松找到匹配特定条件的队列项,并将找到的 message-id:s 传送到删除命令。例如:

exiqgrep -z -o 172800 -i | xargs -r exim -Mrm 
Run Code Online (Sandbox Code Playgroud)

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

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

exiqgrep -o 86400 -f '<>' -i | xargs -r exim -Mrm
Run Code Online (Sandbox Code Playgroud)

它查找超过一天的队列项,并且发送者为空并删除它们。

编辑:您还可以在 exim.conf 中设置以下选项以在两天后自动删除冻结的退回邮件:

ignore_bounce_errors_after = 2d
Run Code Online (Sandbox Code Playgroud)