procmail을 디렉토리에 저장하고 스크립트를 실행하시겠습니까?

procmail을 디렉토리에 저장하고 스크립트를 실행하시겠습니까?

나는 수신 이메일을 디렉토리에 저장하기 위해 아래와 같은 쉬운 규칙을 procmail사용 하고 있습니다.Maildir/

:0:
* ^X-Spam-Status: Yes
Spam/

이제 특정 디렉터리/규칙의 새 이메일에 대한 데스크톱 알림을 받고 싶습니다. 알림 처리 방법은 이미 알고 있지만 procmail디렉터리에 저장하는 방법은 알고 있습니다.그리고스크립트를 실행하시겠습니까?

나는 할 수 있다는 것을 안다파이프a 하지만 저는 파일을 저장한 다음 스크립트를 실행하는 |command것을 선호합니다 .procmail

파이프에 이메일(적어도 헤더)을 포함하거나 dir+file 경로를 인수로 사용하는 것이 좋으며, 스크립트를 비동기식으로 실행하는 것도 좋을 것입니다.

업데이트

따라서 @slm의 답변을 바탕으로 한 결과는 다음과 같습니다.

:0 c:
* ^X-Spam-Status: Yes
Spam/

:0 Whi
* ^X-Spam-Status: Yes
| $HOME/install/bin/notify.sh

c 복사메시지는 디렉토리에 있지만 다음 규칙으로 진행됩니다.

f필터가 아니기 때문에 사용하지 않습니다 . 규칙이 일치하면 procmail이 여기서 중지되기를 원합니다(여기서 매뉴얼을 오해하지 않기를 바랍니다).

W프로그램 오류를 억제하기 위해

h에게파이프헤더만

i파이프에 대한 쓰기 오류를 무시하려면

w스크립트가 반환되기를 기다리고 싶지 않기 때문에 사용하지 않습니다.

잠금 파일도 필요하지 않은 것 같습니다. ( :이후에는 없음 Whi)

업데이트 12/5/14

결국 저는 @tripleee가 제안한 솔루션을 정확하게 채택했습니다.

mailutils-comsatd포기하기 전에 몇 분 동안 놀았습니다 .

.procmailrc:

COMSAT=no

답변1

스크립트를 통해 메일을 실행하려면 다음 두 가지 규칙을 사용하여 규칙을 수정할 수 있습니다.

:0: c
* ^X-Spam-Status: Yes
Spam/

:0: fw
* ^X-Spam-Status: Yes
| /usr/bin/python /work/scripts/process_mail.bash

귀하의 프로그램은 STDIN으로 메일을 받게 됩니다. STDOUT에서 변환된 메일을 '에코'해야 합니다.

fw는 다음을 의미합니다.

  • f파이프를 필터로 간주하십시오.
  • w필터나 프로그램이 완료될 때까지 기다렸다가 종료 코드를 확인하세요(일반적으로 무시됨). 필터가 실패하면 텍스트가 필터링되지 않습니다.
  • c이 메일의 복사본을 생성하세요. 이는 레시피를 전달할 때만 의미가 있습니다. 이 플래그가 영향을 미치는 유일한 전달되지 않는 레시피는 중첩 블록에 있습니다. 참조 블록을 생성하기 위해 실행 중인 procmail 프로세스를 복제합니다(잠금 파일은 상속되지 않음). 이에 따라 복제는 평소대로 진행되고 상위 프로세스는 블록을 뛰어 넘을 것입니다.

참고자료

답변2

@slm의 답변을 약간 수정했습니다.

Maildir에서 잠금을 사용해서는 안 되며, 플래그와 잠금 콜론이 잘못된 방향이었습니다. ( c메시지를 복제하는 대신 이름이 잠금 파일인 잠금 파일을 효과적으로 생성하므로 두 번째 작업이 실행되지 않습니다.)

깃발 f이 제자리에 없는 것 같습니다.

나는 행동의 순서를 바꿨습니다. Procmail의 관점에서 전달한 다음 알리는 것이 합리적이지만 알림은 실패할 수 있는 보조 작업이므로 복제본에서 해당 작업을 수행하고 종료 상태를 무시합니다.

마지막으로 중괄호를 사용하면 하나의 조건에서 두 작업을 그룹화하는 것이 더 직관적입니다.

:0
* ^X-Spam-Status: Yes
{
    :0cWhi
    | $HOME/install/bin/notify.sh
    :0
    Spam/
}

그렇긴 하지만 Procmail은 이미 comsat즉시 알림을 생성한다는 점도 언급했습니다. 이는 레거시 알림 프로토콜이지만 이를 다른 용도로 사용할 수 있습니다. 둘째, 대신 귀하를 모니터링하는 스크립트를 사용하여 간단한 알림 메커니즘을 구축할 수 있습니다 procmail.log. (하지만 로그 파일을 구문 분석하는 것은 형편없습니다.)

관련 정보