Procmail에서 메시지를 필터링하고 전달하는 방법

Procmail에서 메시지를 필터링하고 전달하는 방법

TO: 필드에 따라 특정 수신 메일의 제목 줄을 다시 작성합니다.

:0fhw
* ! ^TO_user@domain\.com\>
* ^TO_[^<>@ ]+@domain\.com\>
* ^Subject:\/.+
| /usr/local/bin/formail -I"Subject: [SPAM]$MATCH"

위의 코드는 (이전 질문에서이메일 수신자 사용자가 일치 테스트에 실패할 경우 procmail은 제목 줄을 다시 작성합니다.) 완벽하게 작동합니다. 다른 곳에서 메일을 받은 경우[이메일 보호됨], 제목 줄이 [SPAM](원래 제목)으로 다시 작성됩니다.

그러나 나는 이와 같은 여러 조건을 수행하고 싶습니다. 위의 작업 블록이 최종 블록이 될 것이지만 그 전에 TO가 다른 주소와 일치하면 제목 줄을 다시 작성하고 싶습니다.

그래서 바로 위에 이 블록을 추가했습니다.

:0fh
* ^TO_special@domain\.com
* ^Subject:\/.+
| /usr/local/bin/formail -I"Subject: [SPECIAL]$MATCH"
$DEFAULT

... 그리고 이것은 작동합니다 - 이메일은 '[이메일 보호됨]' 제목 줄을 다시 작성하세요.

문제는 Procmail이 멈추지 않고 다음 단계로 이동한다는 것입니다.다음차단하고 다시 작성합니다. 따라서 [email protected]제목 줄을 다음과 같이 다시 작성하기 위해 이메일을 보냈습니다.

[스팸] [특집] 원래 제목 어쩌구 저쩌구

왜 이런거야? $DEFAULT첫 번째 블록 끝의 작업으로 인해 Procmail이 해당 이메일에 대한 처리를 중단 하지 않는 이유는 무엇입니까 ?

새 블록과 일치하는 방법은 무엇입니까?멈추다그 메일을 처리하고 그냥 끝이라고요?

답변1

끝에 $DEFAULT구문 오류가 있습니다. 동일한 레시피에 여러 작업을 지정할 수 없습니다.

당신이 할 수 있는 일은 그것을 두 가지 조리법으로 나누는 것입니다. 또는 이 경우 단순히 재작성과 전달을 결합하면 됩니다.

:0:
* ^TO_special@domain\.com
* ^Subject:\/.+
| /usr/local/bin/formail -I"Subject: [SPECIAL]$MATCH" >>$DEFAULT

fh전체 메시지를 통해(헤더뿐만 아니라 h) 푸시하고 파이프라인의 결과를 Procmail로 다시 캡처하는 것이 아니라 전달하기를 원하기 때문에 더 이상 플래그가 없습니다 f.

이는 $DEFAULT디렉토리가 아닌 파일이라고 가정합니다. 따라서 :잠금을 지정하기 위해 두 번째도 추가합니다.

단일 조건 세트에서 두 가지 작업을 지정하려는 경우 내부에 여러 레시피가 포함된 중괄호를 사용할 수 있습니다. 각 레시피에는 0개 이상의 조건이 있을 수 있지만 작업은 하나만 있을 수 있습니다.

:0
* ^TO_special@domain\.com
* ^Subject:\/.+
{
    :0fhw
    | formail -I"Subject: [SPECIAL]$MATCH"

    :0:
    $DEFAULT
}

하지만 이 경우에는 불필요한 합병증이 발생합니다.

^Subject:( 조건을 논리적으로 속한 레시피로 옮기는 것이 더 관용적일 수도 있지만 formail이는 어쨌든 접선일 뿐입니다.)

또한 PATH..procmailrcformail

관련 정보