¿Cómo purgo un buzón de correo de Linux con una gran cantidad de correos electrónicos? [cerrado]

193

He configurado algunos trabajos cron y envían el resultado cron a un correo electrónico. Ahora, a lo largo de los meses, he acumulado una gran cantidad de correos electrónicos.

Ahora mi pregunta es ¿cómo puedo purgar todos esos correos electrónicos de mi buzón?

anjan
fuente
1
En caso de que quiera limpiar solo los mensajes cron y no otros mensajes, consulte aquí: unix.stackexchange.com/questions/217143/…
Erel Segal-Halevi
3
Cerrado como fuera de tema, pero muy útil.
unfa

Respuestas:

150

Simplemente puede eliminar el /var/mail/usernamearchivo para eliminar todos los correos electrónicos de un usuario específico. Además, los correos electrónicos salientes que aún no se hayan enviado se almacenarán en /var/spool/mqueue.

EdoDodo
fuente
El correo electrónico en cuestión que recibe todos los correos electrónicos cron es decir [email protected]. Solo quiero purgar todos los correos electrónicos recibidos en este correo electrónico, dejando otros intactos. eliminar el nombre de usuario / var / www / eliminará todo, ¿verdad?
anjan
3
usernametiene que ser reemplazado por el usuario para el que desea eliminar los correos electrónicos. En su caso, los correos electrónicos se envían al usuario llamado cron_results, por lo que deberá eliminarlos /var/www/cron_results.
EdoDodo
55
No es una buena manipulación de datos de praxis desde fuera de una aplicación. Si hay una opción o comando que puede hacer el trabajo, es mejor usarlo. Como respondió @timaschew, puede usar el comando 'd' dentro de la herramienta de correo.
pocjoc
1
Muy práctico cuando 'mail' solo responde con 'No hay suficiente memoria - Abortado'.
Herbert Van-Vliet
398

manera alternativa:

mail -N
d *
quit

-NInhibe la visualización inicial de los encabezados de los mensajes al leer el correo o editar una carpeta de correo.
d *borrar todos los correos

timaschew
fuente
66
no funciona en Debian 7.
karatedog
44
Funcionó para mí en Debian 7.5 casi vainilla. Alternativamente, es posible que desee eliminar todos los correos guardados simplemente escribiendo > mboxen el directorio de inicio, esto solo trunca el archivo mbox.
Ciantic
44
@andreas: solo agrégalo funcionando con éxito en CentOS 6.5.
Guillaume G.
3
También trabajó para mí en Debian Wheezy (7.6)
yuikonnu el
2
trabajando en el servidor Ubuntu 14.04
alumno
60

Solo usa:

mail
d 1-15
quit

Lo cual eliminará todos los mensajes entre el número 1 y el 15. Para eliminar todos, use el d * .

Acabo de usar esto yo mismo en ubuntu 12.04.4, y funcionó de maravilla.

Por ejemplo:

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

Luego revise su correo nuevamente:

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

Lo que te está tropezando es que estás usando xo exitpara salir, lo que revierte los cambios durante esa sesión.

Mip
fuente
1
No hay espacio entre d*, al menos en adelante CentOS 7.
CodeMed
77
Usar en exitlugar de quithacerme tropezar. exitcancelará la sesión, por lo que cualquier correo electrónico pendiente de eliminación quedará intacto. quitvolverá a escribir los cambios, por lo que los correos electrónicos eliminados se confirman en ese punto.
Jason
d 1-15funciona en Debian 8. ¡Gracias!
Tadej
No funciona en Red Hat. d 1-15 da 'Numérico ilegal'. También lo hace d *.
Salvador Valencia
23

En lugar de eliminar, creo que podemos anular el archivo, porque el archivo se creará si el servicio de correo aún está activado. Algo como lo siguiente hará el trabajo

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

Y sí, perdón por despertar este viejo hilo, pero sentí que podía contribuir.

xploreraj
fuente
3
También para los perezosos, simplemente escribir esto también funciona:> / var / spool / mail / unixuser
Salvador Valencia
22

Un trazador de líneas:

echo 'd *' | mail -N
Michael Munsey
fuente
En el cuadro HP-UX, el correo no tiene opciones -N. Pero, yes 'd' | mailfunciona como se esperaba.
Byoungchan Lee
6

En UNIX / Linux / Mac OS X puede copiar y anular archivos, ¿no? Entonces, ¿qué tal esta solución?

cp /dev/null /var/mail/root
peter_pilgrim
fuente
2

Si está usando cyrus / sasl / imap en su servidor de correo, entonces una forma rápida y eficiente de purgar todo en un buzón que es anterior al número de días especificado es usar el comando cyrus / imap ipurge . Por ejemplo, aquí hay un ejemplo que elimina todo (¡tenga cuidado!), Anterior a 30 días desde el usuario vleo . Tenga en cuenta que debe iniciar sesión como usuario de cyrus (administrador de correo 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
fuente
1

En lugar de usar "d", ¿por qué no "p"? No estoy seguro si la "p *" funcionará. No intenté eso. Usted puede; sin embargo, use el siguiente 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
WSimpson
fuente
Para aquellos que tienen curiosidad, "p" es la abreviatura de "imprimir".
Isius