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

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

나는 수신 이메일을 디렉토리에 저장하기 위해 procmail간단한 규칙(아래 참조)을 사용합니다.Maildir/

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

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

나도 할 수 있다는 걸 알아관로a 하지만 저는 파일을 저장한 다음 스크립트를 실행하는 |command것을 선호합니다 .procmail

이메일(적어도 헤더)을 파이프에 넣거나 dir + 파일 경로를 매개변수로 전달하는 것은 스크립트를 비동기적으로 실행하는 것과 마찬가지로 좋을 것입니다.

고쳐 쓰다

따라서 @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)

2014년 12월 5일 업데이트됨

결국 나는 @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. (그러나 로그 파일을 구문 분석하는 것은 좋지 않습니다.)

관련 정보