首页 > 代码库 > 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 队列管理