如何清除大量电子邮件的Linux邮箱?

我已经设置了一些cron作业,并将crons结果发送给一个电子邮件。 现在几个月来,我累积了大量的电子邮件。

现在我的问题是如何从我的邮箱清除所有这些电子邮件?

您可以简单地删除/var/mail/username文件以删除特定用户的所有电子邮件。 此外,即将离任但尚未发送的电子邮件将存储在/var/spool/mqueue

替代方法:

 mail -N d * quit 

-N在读取邮件或编辑邮件文件夹时禁止邮件标题的初始显示。
d *删除所有邮件

只要使用:

 mail d 1-15 quit 

这将删除号码1到15之间的所有消息。要删除所有消息,请使用d *

我只是在Ubuntu 12.04.4上自己使用这个,它像一个魅力。

例如:

 eric@dev ~ $ mail Heirloom Mail version 12.4 7/29/08. Type ? for help. "/var/spool/mail/eric": 2 messages 2 new >N 1 Cron Daemon Tue Jul 29 17:43 23/1016 "Cron <eric@ip-10-0-1-51> /usr/bin/php /var/www/sandbox/eric/c" N 2 Cron Daemon Tue Jul 29 17:44 23/1016 "Cron <eric@ip-10-0-1-51> /usr/bin/php /var/www/sandbox/eric/c" & d * & quit 

然后再次检查您的邮件:

 eric@dev ~ $ mail No mail for eric eric@dev ~ $ 

绊倒你的是你正在使用xexit退出,在该会话期间回滚更改。

一个class轮:

 echo 'd *' | mail -N 

我认为我们可以取消该文件,而不是删除,因为如果邮件服务仍然打开,文件将被创build。 像下面的东西会做这个工作

 cat /dev/null >/var/spool/mail/tomlinuxusr 

是的,抱歉唤醒这条老线,但我觉得我可以贡献。

在UNIX / Linux / Mac OS X上,您可以复制和覆盖文件,不是吗? 那么这个解决scheme如何呢?

 cp /dev/null /var/mail/root 

而不是使用“d”,为什么不是“p”。 我不确定“p *”是否会起作用。 我没有尝试。 您可以; 但是使用下面的脚本“

 #!/bin/bash # MAIL_INDEX=$(printf 'ha\nq\n' | mail | egrep -o '[0-9]* unread' | awk '{print $1}') markAllRead= for (( i=1; i<=$MAIL_INDEX; i++ )) do markAllRead=$markAllRead"p $i\n" done markAllRead=$markAllRead"q\n" printf "$markAllRead" | mail 

如果您在邮件服务器上使用cyrus / sasl / imap,则清除指定天数之前的邮箱中的所有内容的一种快速高效的方法是使用cyrus / imap ipurge命令。 例如,这里是一个例子,删除所有的东西(要小心!),比用户vleo早30天。 请注意,您必须以cyrus (imap邮件pipe理员)用户身份login:

[cyrus@mailserver ~]$ /usr/lib/cyrus-imapd/ipurge -f -d 30 user.vleo Working on user.vleo... total messages 4 total bytes 113183 Deleted messages 0 Deleted bytes 0 Remaining messages 4 Remaining bytes 113183