1

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

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

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

非常感谢。

4

1 回答 1

5

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

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

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

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

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

它找到超过 1 天且发件人为空的队列项目并将其删除。

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

ignore_bounce_errors_after = 2d
于 2014-04-15T10:01:55.280 回答