Làm cách nào tôi có thể áp dụng các bộ lọc procmail cho hộp thư đến maildir của mình?


9

Đêm qua tôi đã đăng ký một danh sách gửi thư và sáng nay phát hiện ra rằng bộ lọc procmail của tôi không áp dụng cho nhiều tin nhắn trong danh sách gửi thư. Bây giờ tôi có vô số thư danh sách gửi thư ít quan trọng xen kẽ với các email công việc quan trọng hơn của tôi đang nằm trong hộp thư đến của tôi.

Có thể chạy lại tất cả các email trong hộp thư đến của tôi thông qua các bộ lọc procmail của tôi không?

Lưu ý: Tôi đang sử dụng định dạng maildir



Đó là một giải pháp một phần. Trong trường hợp này, một số email chắc chắn sẽ được chuyển trở lại vào hộp thư đến. Có vẻ như đã có một số giải pháp * nux cho vấn đề này mà tôi không biết, thay vì viết một tập lệnh để mô phỏng quá trình gửi thư hiện có.
Cory Klein

Vấn đề là procmail chỉ hoạt động trên thư mail, nó không hoạt động trên các thư mục, mbox hoặc bất cứ thứ gì khác - điều này có nghĩa là bạn sẽ phải mô phỏng việc gửi hoặc sử dụng một cái gì đó như thunderbird và lọc nó ở đó.
Ulrich Dangel

Câu trả lời:


3

Tôi tin rằng điều này sẽ làm việc. Bạn cần chạy formailđể định dạng lại thư và gửi lại procmail.

Từ thư mục Maildir:

cat * | formail -s procmail


3
Điều này thực sự làm việc? Nó sẽ không để lại tất cả các tin nhắn cũ nơi họ đang ở?
cnst

2

bạn có thể làm điều đó tại chỗ, như thế này:

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

Bạn phải xóa từng email gốc sau đó, nếu không procmail sẽ sao chép nó.

Nó cũng sẽ ghi lại mọi thứ như mới. Tôi không chắc chắn về một cách tốt để xử lý điều đó.


Điều này có vẻ lãng phí trên đĩa io: lọc procmail thường chỉ được thực hiện dựa trên các tiêu đề, nhưng đường ống như vậy sẽ khiến toàn bộ thông điệp được đọc và ghi vào đĩa một lần nữa. Bên cạnh đó, nếu procmail hết bộ nhớ hoặc gặp phải một số vấn đề khác, bạn vẫn xóa tệp một cách vô điều kiện (ouch!), Điều này có vẻ khá đáng sợ, quá. Tôi muốn nói rằng đây là một giải pháp hoàn toàn không thể chấp nhận được theo như maildir.
cnst

1
Điều này có thể được cải thiện dần dần bằng cách thực hiện procmail < $m && rm $mthay vì procmail < $m ; rm $mvậy ít nhất tin nhắn sẽ không bị xóa nếu procmail thất bại.
rrauenza

2

Nếu bạn đang sử dụng mutt, bạn có thể chuyển email qua procmail và cũng có thể xóa bản gốc khỏi hộp thư đến của bạn bằng một lệnh chính như thế này:

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>'

được tìm thấy trên https://mikeburnscoder.wordpress.com/2011/06/12/one-big-mutt-inbox-filtered-after-the-fact-USE-procmail/


1

Có vẻ như không có giải pháp tốt cho việc này: procmail dường như chỉ chấp nhận nhập thư từ stdin, điều này giới hạn các ứng dụng maildir.

Tôi đã phải đối mặt với một tình huống tương tự, và giải pháp tốt nhất phù hợp với nhu cầu của tôi chỉ đơn giản là sao chép những gì tôi muốn procmaillàm, nhưng điều chắc chắn nhất là không thể làm được, với kịch bản nhỏ của riêng tôi, sẽ đủ nếu bạn chỉ có một hoặc hai quy tắc đơn giản mà bạn cần phải chăm sóc:

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

Điều này cũng không tối ưu, nhưng ít nhất nó không nên gặp phải vấn đề IO không cần thiết và mất dữ liệu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.