2012-07-28 2 views
-1

Debian Sid, Sid의 최신 접미사.메일 수신 후 Postfix 전송 - 스크립트 호출

사용자가 메일을 전달한 후에 bash 스크립트를 호출해야합니다. 그래서, 내가 무슨 짓을했는지 :

  • 파일을 생성/등/후위/운송, 예를 들어 : [email protected]로 myscripf 데이터베이스를 만들 수

  • 실행 명령 : postmap 전송

  • 을 main.cf에 추가 : transport_maps = hash :/etc/postfix/transport

  • master.cf에 추가 : myscript unix - nn - 파이프 사용자 = michal 플래그 = FR argv =/home/michal/test.sh

  • 다시로드 후위

문제는 무엇입니까? 이 방법으로 메일을 수신하면 스크립트 "test.sh"가 실행되지만 수신 메일은 메일 박스에 전달되지 않고 수신 즉시 삭제됩니다.

그래서 이것을 피하는 방법은 무엇입니까? 스크립트를 실행해야하지만 수신 메일도 내 편지함으로 전달해야합니다.

답변

1

Procmail을 사용하십시오.

:0c 
| $HOME/test.sh 

스크립트는 표준 입력에서 전체 메시지를 수신하지만, 당신이 메시지를 직접 분석하는 기분하지 않는 경우, 프록 변수에 헤더 값을 추출하기위한 표준 기술이있다. 당신은 파이프 할 수 formail에 :

SUBJECT=`formail -zcxSubject:` 

또는 외부 프로세스를 생성 피할 수 있지만,보다 복잡한 작업을 위해 조금 까다 롭습니다 MATCH로 잡을 수있다;

:0 
* ^Subject:[ ]*\/.+ 
{ SUBJECT=$MATCH } 

([] 내의 공백은 공백과 탭이어야합니다.); 어느 방법이든 test.sh 명령 줄의 매개 변수로 $SUBJECT을 전달할 수 있습니다. 물론 다른 헤더 값을 유사한 방식으로 변수로 추출 할 수 있습니다.

추신. 파이프에서 표준 입력을 사용하므로 formail 호출을 인라인 할 수 없습니다.

:0c 
| $HOME/test.sh "`formail -zcxSubject:`" # erroneous! 

대신 다음과 같이 그것을 분할해야합니다

:0 
* ^Subject:[ ]*\/.+ 
{ SUBJECT=$MATCH } 
:0c 
| $HOME/test.sh "$SUBJECT" 
+0

의미가 있습니다! 나 또한이 sript 매개 변수에 전달해야합니다 : 메일 보낸 사람,받은 날짜 및 메일 제목. 이 파일을 수정하려면 어떻게해야합니까? – user1209216

+0

답변이 업데이트되었습니다. – tripleee

+0

업데이트 된 질문 – user1209216