Hapus surel dari sumber tertentu di surel mailx / BSD

0

Saya perlu menghapus semua email dari sumber tertentu. Saya dapat membuat daftar semua email dengan f [email protected]tetapi saya harus membuangnya ke sesuatu seperti awk dan kembali ke surat ... atau menyalin semua nomor header email satu per satu.

Apakah ada cara yang lebih cepat atau cara yang terintegrasi ke dalam program yang akan melakukannya secara otomatis?

MrSchism
sumber
Apakah Anda secara khusus menggunakan bsd-mailx? IIRC, s-nail (heirloom-mailx) memiliki penyaringan yang jauh lebih luas.
grawity
Ya, saya secara khusus menggunakan program surat BSD. Ini adalah standar pada SDF yang selalu saya gunakan; Saya hanya membiarkan kotak masuk saya menjauh dari saya.
MrSchism
Lihat solusi yang saya usulkan di bawah ini. Jika beberapa / semua asumsi saya salah, harap tunjukkan koreksi dan saya mungkin dapat mengusulkan strategi alternatif.
Jim L.

Jawaban:

0

The procmailpaket termasuk alat yang berguna yang disebut formailyang 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 sendmailproses 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 bashshell Anda, dan bahwa Anda memiliki akses root ke kotak, atau setidaknya hak sudo yang cukup untuk memulai / menghentikan sendmailinstance pada mesin Anda, dan untuk menulis langsung ke kotak surat Anda /var/mail/$USER.

Instal procmailpaket dan baca formailhalaman 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-#####.txtdi direktori saat ini. Itu tidak menulis ke atau menghapus /var/mail/$USERkotak surat Anda , jadi tidak ada salahnya dilakukan.

Menggunakan grep, mengidentifikasi msg-*.txtfile 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: [email protected]' msg*.txt
$ (use less to spot-check a few or all of them)

Jika file pesan yang diidentifikasi oleh grepmemang pesan yang ingin Anda hapus, maka:

$ grep -lF '^From: [email protected]' msg*.txt | xargs rm -v

Jika ada beberapa regexps yang ingin Anda gunakan untuk menemukan pesan yang akan dihapus, Anda dapat kembali dan greplagi 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*.txtfile 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/
Jim L.
sumber