이메일 수신자 사용자가 일치 테스트에 실패할 경우 procmail은 제목 줄을 다시 작성합니다.

이메일 수신자 사용자가 일치 테스트에 실패할 경우 procmail은 제목 줄을 다시 작성합니다.

로컬 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은 백슬래시로 시작하는 정규식에 대해 이상하기 때문입니다.tombobsubdomain.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에서 더 잘 구현됩니다.

관련 정보