电邮服务器会把未能寄出的邮件放到 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 \{\} \;