﻿# 如何刪除 Postfix 中所有還沒發送的郵件

在 Postfix 中有一套 Mail Queue Management 機制，所有郵件都可以全自動的處理，但在發送大量郵件時，有些必要的維護就可能就有需要手動處理，例如刪除所有還在 Queue 中的郵件。

以下是一些常用的指令：

> \# 列出目前在 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 是如何管理 Mail Queue 的可以參考 [qmgr - Postfix queue manager](http://www.postfix.org/qmgr.8.html) 的手冊。

以下是每個目錄摘要的說明其用途：

**MAIL QUEUES**

-   incoming  
      
        從網路寄信進來本機的信。  
        或從本地寄送到本地的信。  
    
-   active  
      
        正在準備發送的郵件。  
    
-   defered  
      
        無法傳送的信。會持續重試。  
    
-   corrupt  
      
        無法讀取或毀損的信。  
    
-   hold  
      
        被暫停發送的信。需要手動開啟才會發出。
    

**DELIVERY STATUS REPORTS**

-   bounce  
      
        每一位收件者的寄送狀態資訊，說明為什麼被「退信」。  
        由 bounce(8) 程式控管  
    
-   defer  
      
        每一位收件者的寄送狀態資訊，說明為什麼被「延遲寄信」。  
        由 defer(8) 程式控管  
    
-   trace  
      
        每一位收件者的寄送狀態資訊，說明被 Postfix 用 "sendmail -v" 或 "sendmail -bv" 指令執行過的狀態。  
        由 trace(8) 程式控管
