로컬 procmail 사용자 "bob"이 있습니다.
이메일이 도착하고 일치하는 경우[이메일 보호됨]이면 아무런 조치도 취하지 않아야 합니다.
그러나 이메일이 도착하고 [anything_else]@domain.com인 경우 제목 줄 앞에 "[스팸]"을 삽입하도록 제목 줄을 다시 작성하고 싶습니다.
따라서 "bob@"에 대한 역 일치(bob@ 이외의 항목에 대한 일치)이며 원래 제목 줄을 유지하고 앞에 "[스팸]"을 추가합니다.
Procmail로 어떻게 할 수 있나요?
답변1
귀하의 요구 사항이 다소 불분명합니다. Procmail은 어떤 문자열과도 일치할 수 있지만 정말로 메시지의 어느 곳에서나 문자열을 찾으려고 합니까? 그리고 domain.com
이 규칙의 목적에 따라 메시지가 포함 되지 않은 메시지를 무시하시겠습니까 ?
:0 HB
* ! ()\<bob@domain\.com\>
* @domain\.com\>
{
:0fhw
* ^Subject:\/.+
| formail -I"Subject: [spam]$MATCH"
}
및 단어 경계 \<
는 or \>
와 같은 하위 문자열의 일치를 방지하고 빈 괄호는 해킹입니다. 왜냐하면 Procmail은 백슬래시로 시작하는 정규식에 대해 이상하기 때문입니다.tombob
subdomain.complete.org
헤더만 보고 싶다면 HB
첫 번째 콜론 줄에서 을 삭제하세요. 을 그대로 둘 수도 있지만 H
플래그를 넣지 않으면 이것이 기본값입니다. 특정 헤더와 일치시키려면 철자를 입력하세요. 수신자를 구체적으로 조사하려는 경우 ^TO_
매크로를 사용하면 다양한 헤더( To:
, Cc:
등)에서 해당 작업을 쉽게 수행할 수 있습니다.
:0fhw
* ! ^TO_bob@domain\.com\>
* ^TO_[^<>@ ]+@domain\.com\>
* ^Subject:\/.+
| formail -I"Subject: [spam]$MATCH"
플래그를 삭제했기 때문에 HB
이전에 두 가지 레시피였던 것을 다른 플래그와 결합할 수 있습니다. 두 번째는 이전 부정 조건에 의해 이미 제외된 을 ^TO_
포함한 모든 주소를 확인합니다 .bob
여기에는 여전히 더 자세히 조사해야 할 몇 가지 특수 사례가 있습니다. 명확하게 하기 위해 질문을 편집할 수 있다면 기본 사항 이상의 내용을 다루도록 업데이트할 수 있습니다.
하지만 SMTP에서는 수신자를 헤더에 명시할 필요가 없습니다. 전형적인 경우는 Bcc:
본질적으로 많은 메일링 리스트에서 사용되는 메커니즘이기도 합니다. MTA에서 수신자를 명시할 수도 있지만 Delivered-To:
적절하게 말하면 이러한 유형의 필터는 대신 MTA에서 더 잘 구현됩니다.