Come posso eliminare una casella di posta linux con un numero enorme di e-mail? [chiuso]


193

Ho impostato alcuni lavori cron e inviano il risultato cron a un'e-mail. Nel corso dei mesi ho accumulato un numero enorme di e-mail.

Ora la mia domanda è: come posso eliminare tutte quelle e-mail dalla mia casella di posta?


1
Se desideri pulire solo i messaggi cron e non altri messaggi, vedi qui: unix.stackexchange.com/questions/217143/…
Erel Segal-Halevi,

3
Chiuso come fuori tema, ma estremamente utile.
unfa,

Risposte:


150

Puoi semplicemente eliminare il /var/mail/usernamefile per eliminare tutte le e-mail per un utente specifico. Inoltre, le e-mail in uscita ma non ancora inviate verranno archiviate /var/spool/mqueue.


L'e-mail in questione che riceve tutte le e-mail cron è diciamo cron_results@site.com. Voglio solo eliminare tutte le e-mail ricevute su questa e-mail, lasciando le altre intatte. l'eliminazione del nome utente / var / www / verrà eliminato tutto, giusto?
anjan,

3
usernamedeve essere sostituito con l'utente per il quale desideri rimuovere le email. Nel tuo caso, le e-mail vengono inviate all'utente chiamato cron_results, quindi dovresti eliminare /var/www/cron_results.
EdoDodo,

5
Non è una buona manipolazione dei dati di prassi dall'esterno di un'applicazione. Se esiste un'opzione o un comando che può eseguire il lavoro, è meglio utilizzarlo. Come ha risposto @timaschew, puoi usare il comando 'd' all'interno dello strumento di posta.
pocjoc,

1
Molto pratico quando "mail" risponde solo con "Memoria insufficiente - Interrotta".
Herbert Van-Vliet,

398

modo alternativo:

mail -N
d *
quit

-NInibisce la visualizzazione iniziale delle intestazioni dei messaggi durante la lettura della posta o la modifica di una cartella di posta.
d *elimina tutti i messaggi


6
non funziona su Debian 7.
karatedog

4
Ha funzionato per me in Debian 7.5 quasi vaniglia. In alternativa si potrebbe voler eliminare tutte le e-mail salvate semplicemente digitando > mboxnella home directory, questo tronca semplicemente il file mbox.
Ciantic,

4
@andreas: basta aggiungerlo funzionando correttamente su CentOS 6.5.
Guillaume G.

3
Ha lavorato anche per me su Debian Wheezy (7.6)
yuikonnu il

2
lavorando sul server Ubuntu 14.04
allievo

60

Usa solo:

mail
d 1-15
quit

Che eliminerà tutti i messaggi tra il numero 1 e 15. per eliminare tutto, utilizzare il d *.

L'ho usato da solo su Ubuntu 12.04.4, e ha funzionato come un fascino.

Per esempio:

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

Quindi controlla di nuovo la tua posta:

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

Ciò che ti sta inciampando è che stai usando xo exitper uscire che ripristina le modifiche durante quella sessione.


1
Non c'è spazio tra d*, almeno su CentOS 7.
CodeMed

7
Usare exitinvece di quitfarmi inciampare. exitinterromperà la sessione, pertanto eventuali e-mail in attesa di eliminazione verranno lasciate intatte. quitriscriverà le modifiche, quindi le e-mail cancellate vengono impegnate a quel punto.
Jason,

d 1-15funziona su Debian 8. Grazie!
Tadej,

Non funziona in Red Hat. d 1-15 dà "Numerico illegale". Anche d *.
Salvador Valencia,

23

Invece di eliminare, penso che possiamo annullare il file, perché il file verrà creato se il servizio di posta è ancora attivo. Qualcosa come seguire farà il lavoro

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

E sì, scusate il risveglio di questo vecchio thread, ma sentivo di poter contribuire.


3
Anche per i più pigri, anche solo digitando questo funziona:> / var / spool / mail / unixuser
Salvador Valencia,


6

Su UNIX / Linux / Mac OS X puoi copiare e sovrascrivere i file, vero? Che ne dici di questa soluzione:

cp /dev/null /var/mail/root

2

Se stai usando cyrus / sasl / imap sul tuo server di posta, allora un modo rapido ed efficiente per eliminare tutto in una casella di posta che è più vecchio del numero di giorni specificato è usare il comando cyrus / imap ipurge . Ad esempio, ecco un esempio che rimuove tutto (attenzione !!), più vecchio di 30 giorni dall'utente vleo . Si noti che è necessario accedere come utente cyrus (amministratore di posta elettronica 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

Invece di usare "d", perché non "p". Non sono sicuro che la "p *" funzionerà. Non ci ho provato. Puoi; tuttavia usa il seguente script "

#!/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

Per coloro che sono curiosi, "p" è l'abbreviazione di "stampa".
Isius,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.