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?


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.


Email pada pertanyaan yang menerima semua email cron adalah mengatakan cron_results@site.com. 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


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.


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.


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


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

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


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

Bagi mereka yang penasaran, "p" adalah kependekan dari "print".
Isius
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.