Jak wyczyścić skrzynkę pocztową systemu Linux za pomocą dużej liczby wiadomości e-mail? [Zamknięte]

193

Mam skonfigurowane niektóre zadania cron, a oni wysyłają wyniki cron na e-mail. Teraz w ciągu miesięcy zgromadziłem ogromną liczbę e-maili.

Teraz moje pytanie brzmi: jak mogę usunąć wszystkie te e-maile ze skrzynki pocztowej?

anjan
źródło
1
Jeśli chcesz wyczyścić tylko wiadomości Crona, a nie inne wiadomości, zobacz tutaj: unix.stackexchange.com/questions/217143/…
Erel Segal-Halevi
3
Zamknięte jako nie na temat, ale niezwykle przydatne.
unfa

Odpowiedzi:

150

Możesz po prostu usunąć /var/mail/usernameplik, aby usunąć wszystkie wiadomości e-mail dla konkretnego użytkownika. Ponadto wiadomości e-mail wychodzące, które nie zostały jeszcze wysłane, zostaną zapisane /var/spool/mqueue.

EdoDodo
źródło
Adres e-mail w pytaniu, który odbiera wszystkie e-maile cron, to [email protected]. Chcę tylko wyczyścić wszystkie e-maile otrzymane w tym e-mailu, pozostawiając inne nietknięte. usunięcie / var / www / nazwa użytkownika spowoduje usunięcie wszystkich, prawda?
anjan
3
usernamenależy zastąpić użytkownikiem, dla którego chcesz usunąć wiadomości e-mail. W twoim przypadku wiadomości e-mail są wysyłane do dzwoniącego użytkownika cron_results, więc musisz je usunąć /var/www/cron_results.
EdoDodo,
5
Nie jest to dobra praktyka manipulacji danymi spoza aplikacji. Jeśli istnieje opcja lub polecenie, które może wykonać zadanie, lepiej go użyć. W odpowiedzi na @timaschew możesz użyć polecenia „d” w narzędziu poczty.
pocjoc
1
Bardzo praktyczne, gdy „mail” odpowiada tylko „Za mało pamięci - przerwane”.
Herbert Van-Vliet,
398

alternatywny sposób:

mail -N
d *
quit

-NBlokuje początkowe wyświetlanie nagłówków wiadomości podczas czytania wiadomości lub edytowania folderu poczty.
d *usuń wszystkie maile

unikaj czasu
źródło
6
nie działa na Debianie 7.
karatedog
4
Działa dla mnie w prawie waniliowym Debianie 7.5. Alternatywnie można usunąć wszystkie zapisane wiadomości e-mail po prostu wpisując > mboxkatalog domowy, to po prostu obcina plik mbox.
Ciantic
4
@andreas: wystarczy dodać, że działa z powodzeniem na CentOS 6.5.
Guillaume G.
3
Pracowałem także dla mnie przy Debian Wheezy (7.6)
yuikonnu,
2
pracuje na serwerze Ubuntu 14.04
uczeń
60

Po prostu użyj:

mail
d 1-15
quit

Które usunie wszystkie wiadomości od numeru 1 do 15. Aby usunąć wszystkie, użyj d *.

Właśnie tego użyłem na Ubuntu 12.04.4 i działało to jak urok.

Na przykład:

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

Następnie sprawdź ponownie swoją pocztę:

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

To, co cię denerwuje, to to, że używasz xlub exitrezygnujesz, co przywraca zmiany podczas tej sesji.

Mip
źródło
1
Nie ma między nimi d*przynajmniej miejsca CentOS 7.
CodeMed
7
Używanie, exita nie quitpotykanie mnie. exitprzerwie sesję, więc wszelkie wiadomości oczekujące na usunięcie pozostaną nienaruszone. quitzapisze zmiany z powrotem, więc usunięte wiadomości e-mail są zatwierdzane w tym momencie.
Jason
d 1-15działa na Debianie 8. Dzięki!
Tadej
Nie działa w Red Hat. d 1-15 podaje „Nielegalną liczbę”. Podobnie d *.
Salvador Valencia
23

Zamiast usuwać, myślę, że możemy anulować plik, ponieważ plik zostanie utworzony, jeśli usługa pocztowa jest nadal włączona. Coś takiego jak podążanie wykona zadanie

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

I tak, przepraszam, że przebudziłem ten stary wątek, ale czułem, że mogę wnieść swój wkład.

xploreraj
źródło
3
Również dla leniwych, wpisanie tego też działa:> / var / spool / mail / unixuser
Salvador Valencia
22

Jedna wkładka:

echo 'd *' | mail -N
Michael Munsey
źródło
W polu HP-UX poczta nie ma opcji -N. Ale yes 'd' | maildziała zgodnie z oczekiwaniami.
Byoungchan Lee
6

W systemach UNIX / Linux / Mac OS X można kopiować i zastępować pliki, prawda? A co z tym rozwiązaniem:

cp /dev/null /var/mail/root
peter_pilgrim
źródło
2

Jeśli używasz cyrus / sasl / imap na swoim serwerze pocztowym, to jednym z szybkich i skutecznych sposobów na wyczyszczenie wszystkiego w skrzynce pocztowej, która jest starsza niż określona liczba dni, jest użycie polecenia cyrus / imap ipurge . Na przykład, oto przykład usuwania wszystkiego (bądź ostrożny !!), starszy niż 30 dni od użytkownika vleo . Zauważ, że musisz być zalogowany jako użytkownik Cyrus (administrator poczty 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

Vleo
źródło
1

Zamiast używać „d”, dlaczego nie „p”. Nie jestem pewien, czy „p *” zadziała. Nie próbowałem tego. Możesz; jednak użyj następującego skryptu „

#!/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
źródło
Dla tych, którzy są ciekawi, „p” jest skrótem od „print”.
Isius