我最近发现我们的一台 Ubuntu 服务器每分钟生成数十封通知电子邮件,并限制了它与其他几台服务器共享的 Office 365 中继帐户。我停止了这台服务器上的 Postfix 服务,并禁用了生成所有这些警报(以及随后的传递失败消息级联)的脚本。但是,我没有考虑到 Postfix 队列管理器,它保留了数千条这样的消息,并在我重新启动 Postfix 时尝试再次发送它们。
我第一次尝试清除队列,虽然有点笨拙,但尝试方法是导航到队列目录/var/spool/postfix
并手动从“活动”和“传入”文件夹中删除文件。但是,当我运行时,postqueue -p
队列中仍然显示大量电子邮件。
完全重置或清除 Postfix 队列的最佳方法是什么?
答案1
您应该使用postsuper
命令从 Postfix 队列中删除消息 - 该-d <queueid>
选项将删除具有指定队列 ID 的消息。
我正在使用类似以下脚本来运行邮件队列中的所有消息:
mailq | awk '$7~/@/{print$1}' | while read qid; do postsuper -d $qid; done
答案2
由于您直接弄乱了队列的文件,您可能需要发出一个postsuper -p
。
-p 清除系统或软件崩溃后留下的旧临时文件。
几年前,我编写了一个小脚本,以便更好地处理 Postfix 邮件队列中的某些情况,而不仅仅是执行临时的一行代码。将来您可能会发现它很有用。
$ cat /usr/local/sbin/postclear
#!/bin/bash
usage() {
echo "${0/*\/} --from <address1> [<address2> .. <addressN>]"
echo "${0/*\/} --bounce <address1> [<address2> .. <addressN>]"
echo "${0/*\/} --to <address1> [<address2> .. <addressN>]"
}
if [ $# -lt 2 ]; then
usage 1>&2 ;
exit 1;
fi
case $1 in
--from )
shift
while (( $# )) ; do
postqueue -p | grep -e "$1" | grep -Eo '^[A-F0-9]+' | postsuper -d -
shift
done
exit;;
--bounce )
shift
while (( $# )) ; do
postqueue -p | grep -E -B2 -e "$1" | grep MAILER-DAEMON | grep -Eo '^[A-F0-9]+' | postsuper -d -
shift
done
exit;;
--to )
shift
while (( $# )) ; do
postqueue -p | grep -E -B2 -e "$1" | grep -Eo '^[A-F0-9]+' | postsuper -d -
shift
done
exit;;
* )
echo "Unknown option $1" >&2
exit 1;;
esac