Як очистити поштову скриньку Linux з величезною кількістю електронних листів? [зачинено]


193

У мене є налаштування деяких завдань, які надсилають крони, і вони надсилають результат крони на електронний лист. Зараз за ці місяці я накопичив величезну кількість електронних листів.

Тепер моє запитання - як я можу очистити всі ці електронні листи зі своєї поштової скриньки?


1
У разі, якщо ви хочете очистити лише повідомлення від cron, а не інші повідомлення, дивіться тут: unix.stackexchange.com/questions/217143/…
Segal-Halevi

3
Закрито як поза темою, але надзвичайно корисно.
несправжнє

Відповіді:


150

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


Питання, на яке ви отримуєте всі електронні листи 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 *видалити всі листи


6
не працює на Debian 7.
karatedog

4
Це працювало для мене в майже ванільному Debian 7.5. Крім того, можна видалити всі збережені листи, просто ввівши > mboxв домашній каталог, це просто скорочує файл mbox.
Сіантік

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

І так, вибачте за пробудження цієї старої нитки, але я відчув, що можу зробити свій внесок.


3
Також для ледачих просто вводити це працює:> / var / spool / mail / unixuser
Сальвадор Валенсія,


6

У UNIX / Linux / Mac OS X ви можете скопіювати та змінити файли, чи не так? То як щодо цього рішення:

cp /dev/null /var/mail/root

2

Якщо ви використовуєте cyrus / sasl / imap на своєму поштовому сервері , то одним із швидких та ефективних способів очистити все у поштовій скриньці, яка є старшою за вказану кількість днів, є використання команди cyrus / imap ipurge . Наприклад, ось приклад видалення всього користувача (будьте обережні !!), старшого за 30 днів від користувача vleo . Зверніть увагу, що ви повинні увійти як користувач cyrus (адміністратор IMP-пошти):

[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

Замість того, щоб використовувати "d", чому б не "p". Я не впевнений, чи спрацює "p *". Я цього не пробував. Ти можеш; проте використовуйте наступний сценарій "

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

Для тих, хто цікавиться, "p" є коротким для "print".
Ісій
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.