Postfix 刪除 Queue 未發送的郵件

電郵伺服器會把未能寄出的郵件放到 Queue 裡面, 在特定時間內嘗試重發, 一般上不用理會, 但如果電郵伺服器發送大量郵件時, 或者有個別使用者發送過垃圾電郵, Queue 內便會堆積很多郵件, 這時可以動刪除。

Postfix 預設郵件會放在 /var/spool/postfix/ 目錄下, 如果知道郵件的位置, 直接刪除也可以, 但一般都會使用不同的工具刪除。/var/spool/postfix/ 下的目錄分別儲存不同類型的郵件, 它們主要用作:

active: 目前正在準備發送的郵件.
bounce: 每封郵件的寄送狀態資訊, 紀錄了退信的原因.
corrupt: 損毀或無法讀取的郵件.
defer: 每封郵件的寄送狀態資訊, 紀錄了延遲寄信的原因.
defered: 無法傳送的郵件, 會在設定了的時間內不斷重試.
hold: 暫飮傳送的郵件, 需要手動開啟才會發出.
incoming: 從外部網路寄來的郵件, 或本地寄到本地的郵件.
trace: 每個收件者的寄送狀態資訊.


除了用 Postfix 內建的 postsuper 刪除, 如果配合 find 指令進行刪除, 可以較針對性地刪除 Queue 內的郵件, 以下是刪除 Postfix Queue 郵件時的常用指令:

列出所有在 Mail Queue 的郵件:

# mailq

刪除所有在 deferred 的郵件, 即曾經發送失敗的郵件:

# postsuper -d ALL deferred

跟上面一樣, 刪除所有在 deferred 的郵件, 但因為用 find 指令執行, 可以在刪除的過程中, 看到哪些郵件被刪除:

# find /var/spool/postfix/deferred -type f -exec rm -vf \{\} \;

刪除 3 天前的無法發出的郵件:

# 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 \{\} \;
Tags:

Leave a Reply