Bagaimana cara membersihkan kotak surat linux dengan sejumlah besar email? [Tutup]

193

Saya telah menyiapkan beberapa pekerjaan cron dan mereka mengirim hasil crons ke email. Sekarang selama berbulan-bulan saya telah mengumpulkan banyak sekali email.

Sekarang pertanyaan saya adalah bagaimana saya bisa membersihkan semua email itu dari kotak surat saya?

anjan
sumber
1
Jika Anda ingin membersihkan hanya pesan cron dan bukan pesan lain, lihat di sini: unix.stackexchange.com/questions/217143/…
Erel Segal-Halevi
3
Ditutup sebagai di luar topik, tetapi sangat bermanfaat.
unfa

Jawaban:

150

Anda cukup menghapus /var/mail/usernamefile untuk menghapus semua email untuk pengguna tertentu. Juga, email yang keluar tetapi belum terkirim akan disimpan di /var/spool/mqueue.

EdoDodo
sumber
Email pada pertanyaan yang menerima semua email cron adalah mengatakan [email protected]. Saya hanya ingin membersihkan semua email yang diterima di email ini, membiarkan orang lain tetap utuh. menghapus / var / www / nama pengguna akan menghapus semua, kan?
anjan
3
usernameharus diganti dengan pengguna yang ingin Anda hapus emailnya. Dalam kasus Anda, email sedang dikirim ke pengguna yang dipanggil cron_results, jadi Anda harus menghapus /var/www/cron_results.
EdoDodo
5
Ini bukan manipulasi data praksis yang baik dari luar aplikasi. Jika ada opsi atau perintah yang dapat melakukan pekerjaan, lebih baik menggunakannya. Ketika @timaschew menjawab, Anda dapat menggunakan perintah 'd' di dalam alat email.
pocjoc
1
Sangat praktis ketika 'mail' hanya merespon dengan 'Not enough memory - Aborted'.
Herbert Van-Vliet
398

cara alternatif:

mail -N
d *
quit

-NMenghambat tampilan awal header pesan saat membaca email atau mengedit folder email.
d *hapus semua email

timaschew
sumber
6
tidak bekerja pada Debian 7.
karatedog
4
Itu bekerja untuk saya di hampir vanila Debian 7.5. Atau orang mungkin ingin menghapus semua email yang disimpan hanya dengan mengetik > mboxdi direktori home, ini hanya memotong file mbox.
Ciantic
4
@ andreas: tambahkan saja berhasil di CentOS 6.5.
Guillaume G.
3
Juga bekerja untuk saya di Debian Wheezy (7.6)
yuikonnu
2
bekerja di server Ubuntu 14.04
pupil
60

Cukup gunakan:

mail
d 1-15
quit

Yang akan menghapus semua pesan antara nomor 1 dan 15. untuk menghapus semua, gunakan d *.

Saya hanya menggunakan ini sendiri di ubuntu 12.04.4, dan itu bekerja seperti pesona.

Sebagai contoh:

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

Kemudian periksa lagi email Anda:

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

Apa yang membuat Anda tersandung adalah Anda menggunakan xatau exituntuk keluar yang mengembalikan perubahan selama sesi itu.

Mip
sumber
1
Tidak ada ruang di antara d*, setidaknya di CentOS 7.
CodeMed
7
Menggunakan exitdaripada quitmembuatku tersandung. exitakan membatalkan sesi, sehingga semua email yang menunggu penghapusan dibiarkan utuh. quitakan menulis perubahan kembali, jadi email yang dihapus dilakukan pada saat itu.
Jason
d 1-15bekerja di Debian 8. Terima kasih!
Tadej
Tidak bekerja di Red Hat. d 1-15 memberikan 'Angka ilegal'. Begitu juga d *.
Salvador Valencia
23

Daripada menghapus, saya pikir kita dapat membatalkan file, karena file akan dibuat jika layanan email masih aktif. Sesuatu seperti mengikuti akan melakukan pekerjaan itu

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

Dan ya, maaf karena membangkitkan utas lama ini, tetapi saya merasa saya bisa berkontribusi.

xploreraj
sumber
3
Juga untuk yang malas, hanya mengetik ini juga berfungsi:> / var / spool / mail / unixuser
Salvador Valencia
22

Satu liner:

echo 'd *' | mail -N
Michael Munsey
sumber
Dalam kotak HP-UX, surat tidak memiliki opsi -N. Tapi, yes 'd' | mailberfungsi seperti yang diharapkan.
Byoungchan Lee
6

Pada UNIX / Linux / Mac OS X Anda dapat menyalin dan menimpa file, bukan? Jadi bagaimana dengan solusi ini:

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

Jika Anda menggunakan cyrus / sasl / imap pada server surat Anda, maka salah satu cara cepat dan efisien untuk membersihkan segala sesuatu di kotak surat yang lebih lama maka jumlah hari yang ditentukan adalah dengan menggunakan perintah cyrus / imap ipurge . Sebagai contoh, berikut adalah contoh menghapus semuanya (hati-hati !!), lebih lama dari 30 hari dari pengguna vleo . Perhatikan, bahwa Anda harus masuk sebagai pengguna cyrus (administrator imap mail):

[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
sumber
1

Daripada menggunakan "d", mengapa tidak "p". Saya tidak yakin apakah "p *" akan berfungsi. Saya tidak mencobanya. Kamu bisa; namun gunakan skrip berikut "

#!/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
sumber
Bagi mereka yang penasaran, "p" adalah kependekan dari "print".
Isius