Postfix: 이메일 사본을 스크립트에 전달하지만 원본은 메일박스에 전달합니다.

Postfix: 이메일 사본을 스크립트에 전달하지만 원본은 메일박스에 전달합니다.

실제로는 매우 간단합니다. 들어오는 모든 이메일을 PHP 스크립트에 전달하고 싶지만 사본으로서만 원본 이메일이 평소처럼 사서함에 전달됩니다.

나는 그것을 작동시킬 수없는 것 같습니다. 나는 다음을 시도했습니다

(1)포괄 별칭(mysql)을 만들었습니다.

@mydomain.tld   [email protected]

(2)/etc/postfix/mailpipe.cf에 regex-transport 매핑을 생성했습니다(기본적으로 mydomain.tld의 모든 이메일에 적용한다는 의미).

/.*@mydomain\.tld/   mailpipe:

(삼)/etc/postfix/main.cf에 모두 통합했습니다.

transport_maps = ... regexp:/etc/postfix/mailpipe.cf
virtual_alias_maps = proxy:mysql:/etc/postfix/....

(4)/etc/postfix/master.cf에 전송을 추가했습니다:

mailpipe   unix  -       n       n       -       -       pipe
  flags=FR user=localuser argv=/path/to/my/script.php
  ${nexthop} ${user}

스크립트:

#!/usr/bin/php -q
<?php
  $file = '/home/localuser/pipe/log.log';
  $input = file_get_contents('php://input');
  file_put_contents($file, $input, FILE_APPEND | LOCK_EX);

따라서 설정이 작동하는 것 같습니다. 스크립트는 수신 이메일에 적중되지만 $input비어 있습니다(다른 문자열에서는 작동함). 이메일이 처리된 후 제거/폐기되는 중입니다.그래서 여기에 내 두 가지 질문이 있습니다.

  1. 스크립트에서 이메일 내용에 어떻게 액세스할 수 있나요?

  2. 처리 후 이메일이 폐기되는 것을 방지하려면 어떻게 해야 합니까? 평소처럼 하나의 복사본을 받은 편지함에 전달하고 다른 하나는 처리를 위해 스크립트에 전달하는 방법이 있습니까?

답변1

이는 receive_bcc_maps를 사용하여 모든 이메일을 스크립트로 라우팅하도록 구성된 로컬 전용 주소로 숨은 참조로 지정함으로써 수행할 수 있습니다.

/etc/postfix/recipient_bcc에 다음 줄을 추가합니다. 편집이 완료된 후 "postmap /etc/postfix/recipient_bcc"를 실행하십시오. 이렇게 하면 도메인이 "@yourdomain.tld"와 "robotscript@localhost" 주소가 일치하는 모든 이메일을 BCC에 Postfix에 알립니다.

@yourdomain.tld  robotscript@localhost

/etc/postfix/transport.conf에 다음 줄을 추가합니다. 편집이 완료된 후 "postmap /etc/postfix/transport"를 실행하십시오. 이는 "robotscript@localhost" 주소로 향하는 이메일이 다른 곳으로 전달되지 않고 이 서버로 직접 전달된다는 것을 Postfix에 알려줍니다.

robotscript@localhost :

Postfix가 위에서 입력한 구성을 사용하도록 /etc/postfix/main.cf에 다음 줄을 추가합니다.

recipient_bcc_maps = hash:/etc/postfix/recipient_bcc
transport_maps = hash:/etc/postfix/transport

/etc/postfix/main.cf의 "mydestination" 매개변수에 "localhost" 값이 포함되어 있는지 확인하십시오.

/etc/aliases에 다음 줄을 추가합니다. 편집이 완료된 후 "postalias /etc/aliases"를 실행하십시오. 이는 실제로 "robotscript@localhost"로 향하는 이메일을 PHP 스크립트로 전달하는 것입니다. STDIN에서 이메일 내용을 읽도록 스크립트를 설정해야 합니다.

robotscript: "|/path/to/your/php_script.php"

Postfix를 다시 시작하면 모든 이메일이 스크립트에 복사되고 원래 수신자 주소로 전달됩니다.

관련 정보