procmailrc(스팸용 임시 주소만 허용)를 사용하여 특정 수신자 주소의 메일을 차단하고 싶습니다.
killfile/blacklist를 사용하여 코드 예제를 찾았지만 보낸 사람 주소(FROM)에서만 작동합니다.
FROM=`formail -xFrom: | sed -e 's/ *(.*)//; s/>.*//; s/.*[:<] *//'`
:0
* ? fgrep -qxis $FROM $PMDIR/killfile
/dev/null
수신자 주소(TO)에 대해 작동하도록 이 코드를 어떻게 조정합니까? 원하지 않는 수신자 주소를 텍스트 파일에 나열할 수 있으면 좋을 것입니다.
제가 정규식에 대한 경험이 없어서 알기 쉽게 답변해주시면 감사하겠습니다.
내 목표는 차단할 주소를 간단하게 나열하는 것입니다.
[email protected]
[email protected]
procmailrc에서는 다음을 수행해야 합니다:
:0:
* ^To.*[email protected]
/dev/null
:0:
* ^To.*[email protected]
/dev/null
이는 새 주소를 입력하는 것보다 훨씬 번거롭습니다.
답변1
테스트에 편리한 procmail이 없지만 여기에 한 가지 방법이 있습니다.
:0
* ^TO_(one@example\.com|two@example\.com|three...)
/dev/null
아이디어는 "^TO_" 마법 정규식에서 각 스팸 대상 주소를 대안/가능성으로 처리하는 것입니다. 스팸 주소와 일치하면 이메일이 /dev/null로 전달됩니다. "모든 단일 문자"라는 일반적인 정규식 의미를 유지하는 대신 마침표와 일치하도록 이메일 주소에서 마침표를 현명하게 이스케이프 처리했습니다. 귀하의 스팸 주소는 "one@exampleJcom"("J"는 임의의 문자를 나타냄)으로 주소가 지정된 이메일을 수신할 가능성이 낮기 때문에 실제로는 문제가 되지 않습니다.
나는 프로세스를 단순하고 procmail 내에서 유지하기 때문에 이 접근 방식을 좋아합니다.
INCLUDERC
스팸 대상 목록이 자주 변경되는 경우 각 스팸 대상에 대한 "/dev/null" 레시피가 포함된 makefile을 추출하는 등 다른 접근 방식을 고려해 보겠습니다 .
"두 개 이상의 조건을 논리적으로 OR하는 방법은 무엇입니까?"프로메일 FAQ문법을 다룹니다 one|two|three
. 구문은 ^TO_
다음에 설명되어 있습니다.프로메일 빠른 참조아니면 당신의 지역에서peopleprocmailrc.
답변2
찾은 레시피를 쉽게 수정하여 To:
주소를 추출할 수 있습니다.
TO=`formail -xTo: | sed -e 's/ *(.*)//; s/>.*//; s/.*[:<] *//'`
:0
* ? fgrep -qxis "$TO" killfile
/dev/null
물론 이는 CC:
추출 및 기타 여러 수신자 헤더로 확장될 수도 있습니다. 하지만 올바른 해결 방법은 먼저 이러한 주소가 받은 편지함으로 전송되지 않도록 구성하는 것입니다.