首页 > 代码库 > zimbra 的 postfix 队列管理
zimbra 的 postfix 队列管理
将所有要发送的邮件按发件人排序:
[root@dx-it-mta01 wuxiaoyu]# cat /opt/zimbra/work/mailqbysender
#!/bin/bash
mailq | grep ‘^[A-Z0-9]‘ | awk ‘{print $7}‘ | sort | uniq -c | sort -n
[root@dx-it-mta01 wuxiaoyu]#
统计发件人排序的top4
[root@dx-it-mta01 wuxiaoyu]# cat /home/sankuai/wuxiaoyu/mail.sh
#!/bin/bash
sudo -u zimbra -i work/mailqbysender | tail -n4
m=$(sudo -u zimbra -i work/mailqbysender | tail -n1)
n=$(echo $m | awk ‘{print $2}‘)
echo $n
sudo -u zimbra -i mailq | grep $n | cut -c -12 > /tmp/_mailq.txt
[root@dx-it-mta01 wuxiaoyu]#
删除top4中最多的发件人所发的邮件
[root@dx-it-mta01 wuxiaoyu]# cat /home/sankuai/wuxiaoyu/p.sh
#!/bin/bash
cat /tmp/_mailq.txt | /opt/zimbra/postfix/sbin/postsuper -d -
[root@dx-it-mta01 wuxiaoyu]#
zimbra中的postfix
暂缓发送队列中的问题邮件
[root@dx-it-mta01 incoming]# /opt/zimbra/libexec/zmqstat
hold=0
corrupt=0
deferred=96
active=6
incoming=0
[root@dx-it-mta01 incoming]# which postsuper
/usr/sbin/postsuper
[root@dx-it-mta01 incoming]# /opt/zimbra/postfix/sbin/postsuper -h ALL deferred
postsuper: Placed on hold: 96 messages
[root@dx-it-mta01 incoming]# /opt/zimbra/libexec/zmqstat
hold=96
corrupt=0
deferred=0
active=4
incoming=0
[root@dx-it-mta01 incoming]#
解除暂缓发送
[root@dx-it-mta01 incoming]# /opt/zimbra/postfix/sbin/postsuper -H ALL
postsuper: Released from hold: 96 messages
[root@dx-it-mta01 incoming]# /opt/zimbra/libexec/zmqstat
hold=0
corrupt=0
deferred=96
active=11
incoming=0
[root@dx-it-mta01 incoming]#
postfix相关知识补充:
ostfix中有一套Mail Queue Management机制,所有队列中的邮件都可以全自动的处理,但在发送大量邮件的时候,有必要对这个队列进行手工的维护处理,比如说,删除队列中的邮件. 以下是一些常用的命令:
列出目前在 Mail Queue 中的邮件
mailq
刪除所有在 Queue 中的邮件
postsuper -d ALL
刪除所有正在 deferred 队列中的邮件 (删除曾经发送失败的邮件 )
postsuper -d ALL deferred
刪除所有正在 deferred 队列中的郵件 ( 可看出哪些信被刪除了 )
find /var/spool/postfix/deferred -type f -exec rm -vf /{/} /;
刪掉「三天以前」无法发送的邮件
find /var/spool/postfix/deferred -type f -mtime +3 -exec rm -f /{/} /;
列出目前所有无法发送的邮件 find /var/spool/postfix/deferred -type f -exec ls -l –time-style=+%Y-%m-%d_%H:%M:%S {} /;
刪除超过 5 天的 “defer” 佇列中的退信记录 find /var/spool/postfix/defer -type f -mtime +5 -exec rm -f /{/} /;
预设所有跟Postfix 相关的邮件都会放在/var/spool/postfix/ 目录下,想了解Postfix是如何管理队列的,可以参考 qmgr -Postfix queue manager 的手册.
以下是每个目录的用途
MAIL QUEUES
* incoming 收信箱
* active 正在准备发送的邮件
* defered 无法发送的邮件,等待重发
* corrupt 无法读取或者损坏的邮件
* hold 暂停的邮件,需要手工启动 DELIVERY STATUS REPORTS
* bounce 每一位收件者的送信状态,记录为什么退信由 bounce(8) 管理
* defer 每一位收件者的寄送状态,说明为什么延迟由 defer(8) 管理
* trace 每一位收件者的寄送状态信息,说明被 Postfix 用 “sendmail -v” 或 “sendmail -bv” 命令执行的状态由 trace(8) 管理
1. try and deliver the mail from the queue(强制发送队列中的邮件):
$ postfix flush or $ postqueue -f |
2. check mail queue size (查看队列大小):
$ mailq | wc -l |
3. list mails in queue (查看队列中的邮件):
$ postqueue -p or $ mailq |
4.put all deferred mail “on hold” so that no attempt is made to deliver it(暂缓发送队列中的问题邮件):
$ |
5. release mail that was put “on hold”(解除暂缓发送):
$ |
6. purge all deferred emails from the queue without delivering (删除队列中问题的邮件):
$ postsuper -d ALL deferred $ find /var/spool/postfix/deferred -type f -exec rm -vf {} \; |
7. purge specific email from the queue by specifying its message ID (按邮件ID删除队列中的邮件):
$ postsuper -d 0C0FF240F2 |
8. 删除已经三天未发出的邮件
$ find /var/spool/postfix/deferred -type f -mtime +3 -exec rm -f {} \; |
9. 列出所有问题邮件
$ find /var/spool/postfix/deferred -type f \ -exec ls -l --time-style=+%Y-%m-%d_%H:%M:%S {} \; |
10. 删除超过5天的问题邮件的退信记录
$ find /var/spool/postfix/defer -type f -mtime +5 -exec rm -f {} \; |
11. 复杂用法:利用grep得到特定的邮件ID,再删除,如:
$ mailq | grep -B 1 "Hotconcerts@gmail.com" | cut -f 1 -d ! > deletionIDs" $ cat deletionIDs | postsuper -d - |
zimbra 的 postfix 队列管理