如何清除包含大量电子邮件的Linux邮箱?[关闭]


193

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

现在,我的问题是如何清除邮箱中的所有电子邮件?


1
如果您只想清除cron消息而不是其他消息,请参见此处:unix.stackexchange.com/questions/217143/…– Erel
Segal-Halevi

3
由于主题不公开而关闭,但是非常有用。
Unfa

Answers:


150

您只需删除/var/mail/username文件即可删除特定用户的所有电子邮件。另外,外发但尚未发送的电子邮件将存储在中/var/spool/mqueue


收到所有cron电子邮件的有问题的电子邮件是cron_results@site.com。我只想清除此电子邮件中收到的所有电子邮件,而其他邮件保持不变。删除/ var / www / username会全部删除,对不对?
2011年

3
username必须替换为您要删除电子邮件的用户。在您的情况下,电子邮件是发送给的用户cron_results,因此您必须删除/var/www/cron_results
EdoDodo 2011年

5
从应用程序外部进行数据操作不是一个很好的实践。如果有可以执行此操作的选项或命令,则最好使用它。正如@timaschew回答的那样,您可以在邮件工具中使用“ d”命令。
pocjoc

1
当“邮件”仅以“没有足够的内存-已终止”响应时,这非常实用。
Herbert Van-Vliet

398

替代方式:

mail -N
d *
quit

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


6
在Debian不工作7
karatedog

4
它在几乎原始的Debian 7.5中为我工作。或者,您可能只想> mbox在主目录中键入即可删除所有保存的邮件,这只会截断mbox文件。
Ciantic

4
@andreas:只需添加它即可在CentOS 6.5上成功运行。
Guillaume G.

3
还为我制作了Debian Wheezy(7.6)
yuikonnu

2
在Ubuntu 14.04服务器上工作
学生(

60

只需使用:

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 ~ $

使您烦恼的是您正在使用x还是exit要退出,从而回滚该会话期间的更改。


1
两者之间d*至少没有间隔CentOS 7
CodeMed 2015年

7
exit而不是使quit我绊倒。exit将中止会话,因此所有待删除的电子邮件将保持不变。quit会写回更改,因此已删除的电子邮件将在此时提交。
杰森

d 1-15适用于Debian8。谢谢!
Tadej

在Red Hat中不起作用。d 1-15给出“非法数字”。d *也是如此。
萨尔瓦多·瓦伦西亚

23

我认为我们可以使文件无效,而不是删除文件,因为如果邮件服务仍处于打开状态,则将创建文件。像下面这样的事情会做的

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

是的,很抱歉唤醒这个旧线程,但我觉得我可以有所作为。


3
同样对于懒惰的人,只需键入以下命令也可以:> / var / spool / mail / unixuser
Salvador Valencia


6

在UNIX / Linux / Mac OS X上,您可以复制和覆盖文件,不是吗?那么该解决方案如何:

cp /dev/null /var/mail/root

2

如果您在邮件服务器上使用cyrus / sasl / imap,则一种快速有效的方法是清除cyrus / imap ipurge命令中的旧邮箱,然后清除指定天数。例如,以下示例从用户vleo中删除了 30天之前的所有内容(请小心!)。请注意,您必须以cyrus(imap邮件管理员)用户身份登录:

[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


1

与其使用“ d”,不如使用“ p”。我不确定“ p *”是否会起作用。我没有尝试。您可以; 但是使用以下脚本”

#!/bin/bash
#

MAIL_INDEX=$(printf 'h a\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

对于那些好奇的人,“ p”是“打印”的缩写。
Isius 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.