The procmail
paket termasuk alat yang berguna yang disebut formail
yang memungkinkan pengguna untuk iterate atas pesan individu dari kotak surat mbox-gaya tradisional. Pendekatan saya untuk tugas-tugas seperti ini adalah dengan membagi mbox menjadi pesan-pesan individual, menggunakan alat UNIX standar (grep, rm) untuk memproses pesan-pesan, dan kemudian merakit kembali kotak surat. Secara alami, ini perlu dilakukan dengan sendmail
proses berhenti, sehingga tidak ada surat baru yang datang saat Anda sedang bekerja. Hanya downtime singkat yang diperlukan.
Anda tidak mengatakan BSD mana yang Anda gunakan, tetapi saya akan menganggap FreeBSD. Saya juga akan menganggap bahwa Anda menggunakan bash
shell Anda, dan bahwa Anda memiliki akses root ke kotak, atau setidaknya hak sudo yang cukup untuk memulai / menghentikan sendmail
instance pada mesin Anda, dan untuk menulis langsung ke kotak surat Anda /var/mail/$USER
.
Instal procmail
paket dan baca formail
halaman manual.
$ sudo pkg install procmail
$ man formail
Jadikan ruang kerja bersih:
$ mkdir ~/work
$ cd ~/work
Buat skrip sederhana dan buat agar bisa dieksekusi:
$ cat << EOF > cat-msg.sh
#!/bin/sh
cat > msg-$FILENO.txt
EOF
$ chmod 755 cat-msg.sh
Dan satu lagi:
$ cat << EOF > split-mbox.sh
#!/bin/sh
export FILENO="00000"
formail -s cat-msg.sh < "$@"
EOF
$ chmod 755 split-mbox.sh
Hentikan server surat:
$ sudo service sendmail stop
Bagi mbox Anda menjadi beberapa file di direktori saat ini:
./split-mbox.sh /var/mail/$USER
Perintah itu membaca kotak surat Anda, dan membuat file msg-#####.txt
di direktori saat ini. Itu tidak menulis ke atau menghapus /var/mail/$USER
kotak surat Anda , jadi tidak ada salahnya dilakukan.
Menggunakan grep
, mengidentifikasi msg-*.txt
file yang ingin Anda hapus, dan memeriksa beberapa di antaranya untuk memastikan bahwa Anda yakin regexp Anda hanya menargetkan pesan yang ingin Anda hapus. Boleh saja menggunakan beberapa pass regexp, tetapi Anda harus yakin bahwa setiap regexp tidak memiliki positif palsu.
$ grep -lF '^From: spammer@example.com' msg*.txt
$ (use less to spot-check a few or all of them)
Jika file pesan yang diidentifikasi oleh grep
memang pesan yang ingin Anda hapus, maka:
$ grep -lF '^From: spammer@example.com' msg*.txt | xargs rm -v
Jika ada beberapa regexps yang ingin Anda gunakan untuk menemukan pesan yang akan dihapus, Anda dapat kembali dan grep
lagi dengan regexp yang berbeda dan periksa lokasi klik tersebut, dll.
Setelah Anda berhasil menghapus semua pesan yang menyinggung, buat cadangan kotak surat Anda, tulis msg*.txt
file yang tersisa ke kotak surat Anda, dan mulai kembali server surat:
$ cp -vp /var/mail/$USER mbox-$USER
$ cat msg*.txt > /var/mail/$USER
$ sudo service sendmail start
Jika Anda menemukan alat ini berguna, dan ingin menyimpannya untuk digunakan di masa mendatang, maka:
$ sudo mv -vi split-mbox.sh cat-msg.sh /usr/local/bin/