Sendmail:清除/删除/刷新邮件队列

时间:2020-01-09 10:42:07  来源:igfitidea点击:

如何使用UNIX/Linux命令提示符永久删除Sendmail邮件服务器(SMTP)队列中的所有电子邮件?
您可以使用mailq命令sendmail -bp命令来显示排队等待将来传送的邮件的摘要。
执行以下命令:

# mailq

或者

# sendmail -bp

输出示例:

/var/spool/mqueue (1 request)
-----Q-ID----- --Size-- -----Q-Time----- ------------Sender/Recipient----------
p61J75u5037681      893 Fri Jul  1 14:07 
      8BITMIME   (Deferred: Connection timed out with example.com.)
					 
		Total requests: 1

如果要清除队列中的所有消息,则可以cd到/var/spool/mqueue并删除所有文件:

# cd /var/spool/mqueue/
# ls
# rm *

qtool.pl工具

Sendmail邮件服务器不提供任何命令从邮件队列中删除邮件。
上面的内容将从邮件队列中删除所有消息。
您可以使用位于sendmail源代码contrib目录中的qtool.pl脚本,如下所示:

# mailq

输出示例:

/var/spool/mqueue (1 request)
-----Q-ID----- --Size-- -----Q-Time----- ------------Sender/Recipient----------
p61J75u5037681      893 Fri Jul  1 14:07 
      8BITMIME   (Deferred: Connection timed out with example.com.)
					 
		Total requests: 1

记下Q-ID p61J75u5037681并按以下方式运行qtool.pl:

# ./qtool.pl -C /etc/mail/sendmail.cf -d /var/spool/mqueue/p61J75u5037681

其中:

  • -C/etc/mail/sendmail.cf指定sendmail配置文件。
  • -d/var/spool/mqueue/p61J75u5037681删除源指定的消息。在这种情况下,通过Q-ID。

删除所有排队进入example.com域的邮件。
首先,您需要使用mailq命令或者手动设置QIDS,如下所示:

QIDS="qid1 qid2 qidN"

或者

QIDS="$(mailq | grep -B1 'example.com' | grep '^[a-z]'  | awk  '{print }' | sed  's/\*$//')"

使用以下bash for循环删除example.com的所有消息:

for q in $QIDS
do
  /usr/local/bin/qtool.pl -C /etc/mail/sendmail.cf -d /var/spool/mqueue/$q
done