2013-02-19 5 views
0

procmail 설정이 잘 작동하고있어 이메일을받을 때 PHP 스크립트를 아무런 문제없이 실행하는 것처럼 보입니다. 아래PHP 스크립트를 실행하는 Procmail 설정

#BEGIN PROCMAIL SCRIPT FOR MAIL PARSING 
DEFAULT=$HOME/Maildir/ 
MAILDIR=$HOME/Maildir 
PMDIR=$HOME/.procmail 
LOGFILE=$PMDIR/log.`date +%y-%m-%d` 
SHELL=/bin/sh 

:0 
|`/usr/local/php53/bin/php /home/usrmail/email/script.php` 

로그 출력 :

From [email protected] Mon Feb 18 20:49:35 2013 
Subject: TEST 
    Folder: HELLO               2559 
/bin/sh: HELLO: No such file or directory 

그냥 PHP 스크립트에 간단한 echo "HELLO";인가, 잘 작동하는 것 같다

다음은 .procmailrc 파일의 예입니다! 실제로 다음 코드를 사용하여 이메일을 구문 분석 할 때

그러나 나는 로그에 아래의 오류 : 이것은 분명히 제대로 작동하지

$rawEmail = ''; 
if (($fp = fopen('php://stdin', 'r')) !== false) { 
    while (!feof($fp)) { 
     $rawEmail .= fread($fp, 1024); 
    } 
    fclose($fp); 
} 

$email = new Zend_Mail_Message(array(
    'raw' => $rawEmail 
)); 

From [email protected] Mon Feb 18 20:44:36 2013 
Subject: Re: Test 
    Folder: Fatal error: Class 'Zend_Mail_Message' not found in /home/sy  2747 
/bin/sh: Fatal: No such file or directory 

, 내가 왜 모르겠어요. 하나는 From 헤더가이 헤더를 통과했지만 다른 헤더는 간헐적 인 것으로 보입니다.

또한 디렉토리 (/ home/sy)가 잘 리거나 오류를 일으킬 수있는 부분이 잘립니다.

저는 젠드에게 전혀 익숙하지 않거나 procmail에 익숙하지 않습니다. 나는 이것을 충분히 얻을만큼 행복했으며, 이메일을 조금 파싱하여 이메일의 본문을 가져 와서 어딘가에 넣을 수 있기를 바랍니다. 누군가 IMAP이나 다른 것을 사용하는 것보다 더 좋은 방법이라고 확신하고 있습니다. 누구든지 훌륭한 해결책이나 대안이 있다면 나는 모두 귀입니다. 고마워요!

답변

0

관련이 있지만 다른 구문을 두 개 혼합합니다.

당신이 당신의 스크립트에 파이프하려는 경우, 그냥

:0 
* conditions, maybe 
| /path/to/script 

해야하거나

:0 
* conditions, maybe 
`echo HELLO` 

같은 스크립트의 출력, 뭔가를 사용하려면 폴더로 파일 것 HELLO이라는 이름으로, 즉 스크립트의 출력을 리터럴로 사용하십시오.

PHP의 오류 메시지에 관해서는 PHP의 라이브러리 경로에 무언가를 추가해야한다고 생각합니다 (빠른 검색은 php.iniinclude_path을 수정해야 함을 나타냅니다).

당신은 무엇을 성취하려고합니까? 헤더가 있어야 할 곳의 메시지를 보내려는 경우

:0 
* conditions, maybe 
! -t 

과 같은 메시지를 보내야합니다. 나는 당신이 이것을하고 싶을 상황을 상상할 수 없다. (당신이 잘못된 문제를 모두 풀려고하는 것 말고는). 메시지의 잘린 사본을 보내려면

:0c 
* conditions, maybe 
{ 
    :0fw 
    | head -n 10 
    :0 
    ! -t 
} 

과 같이 메시지를 처음 10 줄로 자릅니다. 1024 바이트로 정확히 잘라내기를 원한다면별로 어렵지 않습니다.

반면에 메시지의 본문 (전체 RFC822 본문, 즉)의 디코드되지 않은 단지 그대로 포함됩니다 등 모든 MIME 첨부 파일, 당신이 할 수

또는

:0b 
saved/ 

와 어쩌면 당신은 PHP가 원하는 경우

:0b 
| /path/to/script.php 

그것은 가치가 무엇인지, 오류 메시지가 절단되는 경우 , 하지만 그 이유는 주로 이메일을 전달할 스크립트의 이름으로 사용하려고하기 때문입니다. 역 따옴표를 제거하면 오류 메시지는 Procmail의 표준 오류로 끝나지 않습니다.

관련 문제