Как очистить почтовый ящик linux от огромного количества писем? [закрыто]

193

Я настроил некоторые задания cron, и они отправляют результат cron по электронной почте. Сейчас за месяцы я накопил огромное количество писем.

Теперь мой вопрос: как я могу удалить все эти письма из моего почтового ящика?

Anjan
источник
1
Если вы хотите очистить только сообщения cron, а не другие сообщения, см. Здесь: unix.stackexchange.com/questions/217143/…
Segal-Halevi
3
Закрыто как не по теме, но чрезвычайно полезно.
unfa

Ответы:

150

Вы можете просто удалить /var/mail/usernameфайл, чтобы удалить все электронные письма для конкретного пользователя. Кроме того, электронные письма, которые являются исходящими, но еще не были отправлены, будут храниться в /var/spool/mqueue.

EdoDodo
источник
Адрес электронной почты, на который поступают все электронные письма cron: cron_results@site.com. Я просто хочу удалить все письма, полученные на это письмо, оставив остальных нетронутыми. удаление / var / www / username удалит все, верно?
Anjan
3
usernameдолжен быть заменен пользователем, для которого вы хотите удалить электронные письма. В вашем случае, электронные письма отправляются вызываемому пользователю cron_results, поэтому вам придется удалить /var/www/cron_results.
EdoDodo
5
Это не хорошая практика манипулирования данными извне приложения. Если есть опция или команда, которая может выполнить эту работу, лучше использовать ее. Как ответил @timaschew, вы можете использовать команду «d» внутри почтового инструмента.
pocjoc
1
Очень практично, когда «почта» отвечает только «Недостаточно памяти - Прервано».
Герберт Ван-Влит
398

альтернативный способ:

mail -N
d *
quit

-NЗапрещает начальное отображение заголовков сообщений при чтении почты или редактировании почтовой папки.
d *удалить все письма

timaschew
источник
6
не работает на Debian 7.
karatedog
4
Это сработало для меня в почти ванильном Debian 7.5. В качестве альтернативы можно удалить все сохраненные письма, просто набрав > mboxв домашнем каталоге, это просто усекает файл mbox.
Ciantic
4
@andreas: просто добавьте, что он успешно работает на CentOS 6.5.
Гийом Г.
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
7
Использование, exitа не quitсбивает меня с толку. exitпрервет сеанс, поэтому любые письма, ожидающие удаления, останутся без изменений. quitзапишет изменения обратно, поэтому удаленные письма будут зафиксированы в этот момент.
Джейсон
d 1-15работает на Debian 8. Спасибо!
Тадей
Не работает в Red Hat. d 1-15 выдает «Нелегальное число». Как и d *.
Сальвадор Валенсия
23

Вместо удаления, я думаю, мы можем аннулировать файл, потому что файл будет создан, если почтовый сервис все еще включен. Что-то вроде следующего сделает работу

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

И да, извините за пробуждение этой старой темы, но я чувствовал, что могу внести свой вклад.

xploreraj
источник
3
Также для ленивых, просто набрав это тоже работает:> / var / spool / mail / unixuser
Сальвадор Валенсия
22

Один лайнер:

echo 'd *' | mail -N
Майкл Манси
источник
В ящике HP-UX почта не имеет опций -N. Но yes 'd' | mailработает как положено.
Byoungchan Lee
6

В UNIX / Linux / Mac OS X вы можете копировать и перезаписывать файлы, не так ли? Так как насчет этого решения:

cp /dev/null /var/mail/root
peter_pilgrim
источник
2

Если вы используете cyrus / sasl / imap на своем почтовом сервере, то одним быстрым и эффективным способом очистки всего в почтовом ящике, который старше указанного числа дней, является использование команды cyrus / imap ipurge . Например, вот пример удаления всего (будьте осторожны !!) старше 30 дней от пользователя vleo . Обратите внимание, что вы должны войти в систему как пользователь cyrus (imap mail administrator):

[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

vleo
источник
1

Вместо того, чтобы использовать «д», почему бы не «р». Я не уверен, будет ли работать «р *». Я не пробовал это. Ты можешь; однако используйте следующий скрипт

#!/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
WSimpson
источник
Для тех, кому любопытно, «p» - это сокращение от «print».
Исиус