Bagaimana saya bisa menerapkan filter procmail saya ke kotak masuk maildir saya?

9

Tadi malam saya berlangganan milis, dan menemukan pagi ini bahwa filter procmail saya tidak berlaku untuk banyak pesan milis. Sekarang saya memiliki banyak pesan milis yang kurang penting diselingi dengan email pekerjaan saya yang lebih penting yang tersimpan di kotak masuk saya.

Apakah mungkin untuk menjalankan kembali semua email di kotak masuk saya melalui filter procmail saya lagi?

Catatan: Saya menggunakan format maildir

Cory Klein
sumber
Itu menghadirkan solusi parsial. Dalam hal ini, beberapa email pasti akan dialihkan kembali ke inbox. Sepertinya sudah ada beberapa solusi * nux untuk masalah ini yang saya tidak sadari, daripada menulis skrip untuk mensimulasikan proses pengiriman surat yang ada.
Cory Klein
Masalahnya adalah procmail hanya berfungsi pada pesan email, itu tidak berfungsi pada folder, mboxes atau apa pun - ini berarti Anda harus mensimulasikan pengiriman atau menggunakan sesuatu seperti thunderbird dan memfilternya di sana.
Ulrich Dangel

Jawaban:

3

Saya yakin ini akan berhasil. Anda perlu menjalankan formailuntuk memformat ulang surat dan mengirimkannya kembali procmail.

Dari direktori Maildir:

cat * | formail -s procmail

George M.
sumber
3
Apakah ini berhasil? Bukankah itu meninggalkan semua pesan lama di mana mereka berada?
cnst
2

Anda mungkin dapat melakukannya di tempat, seperti ini:

$ for m in Mail/{cur,new}/*; do echo $m; procmail <$m; rm $m; done

Anda harus menghapus setiap email asli setelahnya, atau procmail akan menggandakannya.

Itu juga akan merekam semuanya sebagai baru. Saya tidak yakin cara yang baik untuk mengatasinya.

Jake
sumber
Ini akan tampak boros pada disk io: pemfilteran procmail biasanya hanya dilakukan berdasarkan header, tetapi pemipaan seperti itu akan menyebabkan seluruh pesan dibaca dan ditulis ke disk lagi. Selain itu, jika procmail kehabisan memori atau menghadapi beberapa masalah lain, Anda masih tanpa syarat menghapus file (aduh!), Yang tampaknya cukup menakutkan juga. Saya akan mengatakan bahwa ini adalah solusi yang sama sekali tidak dapat diterima sejauh maildir pergi.
cnst
1
Ini bisa ditingkatkan secara bertahap dengan melakukan procmail < $m && rm $malih - alih procmail < $m ; rm $mjadi setidaknya pesan tidak dihapus jika procmail gagal.
rrauenza
2

Jika Anda menggunakan mutt, Anda dapat mengirim email melalui procmail dan juga menghapus yang asli dari kotak masuk Anda dengan perintah kunci seperti ini:

muttrc:

macro index y '<enter-command>unset wait_key<enter><tag-prefix><pipe-entry>/usr/bin/procmail /home/user/.procmailrc<enter><tag-prefix><delete-message><enter-command>set wait_key<enter>'

macro pager y '<enter-command>unset wait_key<enter><pipe-entry>/usr/bin/procmail /home/user/.procmailrc<enter><delete-message><enter-command>set wait_key<enter>'

ditemukan di https://mikeburnscoder.wordpress.com/2011/06/12/one-big-mutt-inbox-filtered-after-the-fact-using-procmail/

pengguna3630647
sumber
1

Sepertinya tidak ada solusi yang baik untuk ini: procmail sepertinya hanya menerima input surat dari stdin, yang membatasi aplikasi maildir.

Saya menghadapi situasi yang serupa, dan solusi terbaik yang sesuai dengan kebutuhan saya adalah menduplikasi apa yang ingin saya procmaillakukan, tetapi apa yang paling pasti tidak dapat dilakukan, dengan skrip kecil saya sendiri, yang seharusnya cukup jika Anda hanya memiliki satu atau dua aturan sederhana Anda perlu mengurus:

cd ~/Maildir/
sh -c 'for i in `egrep -l "^Delivered-To: [email protected]" cur/*`; \
    do mv $i .FreeBSD.perforce/$i; done'

Ini tidak optimal, baik, tetapi setidaknya tidak boleh menderita IO yang tidak perlu dan potensi masalah kehilangan data.

cnst
sumber