Comment purger une boîte aux lettres Linux avec un grand nombre d'e-mails? [fermé]


193

J'ai configuré certains travaux cron et ils envoient le résultat crons à un e-mail. Au fil des mois, j'ai accumulé un grand nombre d'e-mails.

Maintenant, ma question est de savoir comment puis-je purger tous ces e-mails de ma boîte aux lettres?


1
Dans le cas où vous souhaitez nettoyer uniquement les messages cron et pas les autres messages, voir ici: unix.stackexchange.com/questions/217143/…
Erel Segal-Halevi

3
Fermé comme hors sujet, mais extrêmement utile.
unfa

Réponses:


150

Vous pouvez simplement supprimer le /var/mail/usernamefichier pour supprimer tous les e-mails d'un utilisateur spécifique. De plus, les e-mails sortants mais qui n'ont pas encore été envoyés seront stockés dans /var/spool/mqueue.


L'e-mail en question qui reçoit tous les e-mails cron est par exemple cron_results@site.com. Je veux simplement purger tous les e-mails reçus sur cet e-mail, en laissant les autres intacts. supprimer le / var / www / nom d'utilisateur supprimera tout, non?
anjan

3
usernamedoit être remplacé par l'utilisateur pour lequel vous souhaitez supprimer les e-mails. Dans votre cas, les e-mails sont envoyés à l'utilisateur appelé cron_results, vous devrez donc les supprimer /var/www/cron_results.
EdoDodo

5
Ce n'est pas une bonne manipulation des données de la pratique depuis l'extérieur d'une application. S'il existe une option ou une commande qui peut faire le travail, il est préférable de l'utiliser. Comme @timaschew a répondu, vous pouvez utiliser la commande 'd' dans l'outil de messagerie.
pocjoc

1
Très pratique lorsque 'mail' ne répond qu'avec 'Pas assez de mémoire - Abandonné'.
Herbert Van-Vliet

398

voie alternative:

mail -N
d *
quit

-NEmpêche l'affichage initial des en-têtes de message lors de la lecture du courrier ou de la modification d'un dossier de messagerie.
d *supprimer tous les e-mails


6
ne fonctionne pas sur Debian 7.
karatedog

4
Cela a fonctionné pour moi dans Debian 7.5 presque vanille. Alternativement, on peut vouloir supprimer tous les mails enregistrés en tapant simplement > mboxdans le répertoire personnel, cela tronque simplement le fichier mbox.
Ciantic

4
@andreas: il suffit de l'ajouter avec succès sur CentOS 6.5.
Guillaume G.

3
A également travaillé pour moi sur Debian Wheezy (7.6)
yuikonnu

2
travailler sur le serveur Ubuntu 14.04
élève

60

Utilisez simplement:

mail
d 1-15
quit

Ce qui supprimera tous les messages entre le numéro 1 et 15. pour tout supprimer, utilisez le d *.

Je viens de l'utiliser moi-même sur Ubuntu 12.04.4, et cela a fonctionné comme un charme.

Par exemple:

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

Vérifiez à nouveau votre courrier:

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

Ce qui vous fait trébucher, c'est que vous utilisez xou exitpour quitter ce qui annule les modifications au cours de cette session.


1
Il n'y a pas d'espace entre d*, au moins sur CentOS 7.
CodeMed, du

7
Utiliser exitplutôt que quitme faire trébucher. exitinterrompra la session, de sorte que tous les e-mails en attente de suppression restent intacts. quitréécrira les modifications, les e-mails supprimés sont alors validés.
Jason

d 1-15fonctionne sur Debian 8. Merci!
Tadej

Ne fonctionne pas dans Red Hat. d 1-15 donne «Numérique illégal». D * aussi.
Salvador Valence

23

Plutôt que de supprimer, je pense que nous pouvons annuler le fichier, car le fichier sera créé si le service de messagerie est toujours activé. Quelque chose comme suivre fera l'affaire

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

Et oui, désolé d'avoir réveillé ce vieux fil mais j'ai senti que je pouvais contribuer.


3
Aussi pour les paresseux, il suffit de taper cela fonctionne aussi:> / var / spool / mail / unixuser
Salvador Valence


6

Sous UNIX / Linux / Mac OS X, vous pouvez copier et remplacer des fichiers, n'est-ce pas? Alors que diriez-vous de cette solution:

cp /dev/null /var/mail/root

2

Si vous utilisez cyrus / sasl / imap sur votre serveur de messagerie, alors un moyen rapide et efficace de purger tout dans une boîte aux lettres plus ancienne que le nombre de jours spécifié consiste à utiliser la commande cyrus / imap ipurge . Par exemple, voici un exemple de suppression de tout (attention !!), datant de plus de 30 jours de l'utilisateur vleo . Notez que vous devez être connecté en tant qu'utilisateur cyrus (administrateur de messagerie 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

Plutôt que d'utiliser "d", pourquoi pas "p". Je ne sais pas si le "p *" fonctionnera. Je n'ai pas essayé ça. Vous pouvez; cependant utilisez le script suivant "

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

Pour ceux qui sont curieux, "p" est l'abréviation de "print".
Isius
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.