如何一次刷新 Postfix 队列中的一封邮件?

如何一次刷新 Postfix 队列中的一封邮件?

有时,邮件会卡在我的 Postfix 队列中,远程服务器会提示“连接过多,速度慢”​​。我已经将特定域的 Postfix 配置为每秒仅发送一封邮件,但有时似乎不够。

我知道postqueue -f,但它同时发送所有邮件,并且邮件以相同的状态保持在队列中。

我想一次刷新后缀队列中的一封邮件,比如说每秒一封邮件(或两封,或更多)。

答案1

可以刷新某封特定电子邮件,而不是整个队列。如果您依次对每封邮件执行此操作,并在每封邮件之间设置两秒钟的休眠时间,那么应该可以满足您的要求。

首先,您需要找到队列中邮件的队列 ID。您可以使用命令来获取它postqueue -p。以下是示例输出:

-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
6777D6E1E      3517 Mon Jan 25 03:03:02  [email protected]
                                         [email protected]

69F6471CA      2820 Tue Jan 26 03:24:17  [email protected]
                                         [email protected]

您需要的内容在第一列。您可以通过 grep 和 cut 等管道获取所有 ID,如下所示:

[jenny@sameen ~]$ postqueue -p | grep -v ^- | grep -v "(" | cut -d' ' -f1 |grep -e [[:alnum:]]
6777D6E1E
69F6471CA

现在您知道了如何获取 ID,您可以将它们放入带有睡眠的 bash 循环中:

[jenny@sameen ~]$ for ID in `postqueue -p | grep -v ^- | grep -v "(" | cut -d' ' -f1 |grep -e [[:alnum:]] `; do postqueue -i $ID; sleep 2; done

答案2

我的 awk 版本:

for mailid in `postqueue -p | awk '$1 ~ /^[0-9A-F]{11}$/ {print $1}'`; do postqueue -i $mailid; sleep 5; done;

答案3

通过在 sh 中使用管道,Awk 提案略有改进:

postqueue -p | awk '/^[0-9A-F]/{print  "postqueue -i "$1 " ;sleep 2s"}' |sh

相关内容