어젯밤에 메일링 리스트에 가입했는데 오늘 아침에 내 procmail 필터가 많은 메일링 리스트 메시지에 적용되지 않는다는 사실을 발견했습니다. 이제 내 받은 편지함은 덜 중요한 메일링 리스트 메시지와 더 중요한 업무 이메일로 가득 차 있습니다.
내 procmail 필터를 통해 받은 편지함에 있는 모든 이메일을 다시 실행할 수 있습니까?
참고: 저는 maildir 형식을 사용하고 있습니다.
답변1
나는 이것이 효과가 있을 것이라고 믿습니다. formail
재포맷 메시지를 실행하고 를 통해 다시 보내야 합니다 procmail
.
Maildir 디렉토리에서:
cat * | formail -s procmail
답변2
다음과 같이 내부에서 이 작업을 수행할 수 있습니다.
$ for m in Mail/{cur,new}/*; do echo $m; procmail <$m; rm $m; done
그런 다음 각 원본 이메일을 삭제해야 합니다. 그렇지 않으면 procmail이 복사본을 만듭니다.
또한 모든 것을 새로운 것으로 기록합니다. 이 문제를 처리할 수 있는 좋은 방법이 있는지 잘 모르겠습니다.
답변3
mutt를 사용하는 경우 procmail을 통해 이메일을 전송하고 다음과 같은 키보드 명령을 사용하여 받은 편지함에서 원본 메시지를 삭제할 수 있습니다.
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>'
답변4
좋은 해결책은 없는 것 같습니다. procmail은 의 메일 입력만 허용하는 것 같아서 stdin
maildir 응용 프로그램이 제한됩니다.
나도 비슷한 상황에 처해 있었고 내 필요에 가장 잘 맞는 해결책은 내가 하고 싶은 일을 단순히 반복하는 것이었지만 procmail
주의를 기울이기만 하면 내 자신의 작은 스크립트로는 그렇게 할 수 있는 방법이 전혀 없었습니다. 하나 또는 두 개의 간단한 규칙에는 이것으로 충분합니다.
cd ~/Maildir/
sh -c 'for i in `egrep -l "^Delivered-To: [email protected]" cur/*`; \
do mv $i .FreeBSD.perforce/$i; done'
이것도 최적은 아니지만 적어도 불필요한 IO 및 잠재적인 데이터 손실 문제가 발생하지 않습니다.