전자 메일을 릴레이 대신 파일에 저장하도록 postfix를 어떻게 설정합니까?


9

로컬 환경에서 프로덕션 서버의 스테이징 사본을 실행하고 싶습니다. 시스템은 다양한 시나리오에서 고객에게 전자 메일을 보내는 PHP 응용 프로그램을 실행하며 준비 환경에서 전자 메일이 전송되지 않도록하고 싶습니다.

더미 전자 메일 보낸 사람을 사용하도록 코드를 조정할 수 있지만 프로덕션 환경과 동일한 코드를 실행하고 싶습니다. 다른 MTA를 사용할 수 있습니다 (Postfix는 프로덕션 환경에서 사용하는 것입니다). 데비안 / 우분투에서 설정하기 쉬운 것을 원합니다. :)

따라서 모든 전자 메일을 릴레이하는 대신 하나 이상의 파일에 저장하도록 로컬 Postfix 설치를 설정하고 싶습니다. 실제로, 나는 보낸 전자 메일을 확인하는 것이 가능한 한 실제로 어떻게 저장되는지는 중요하지 않습니다. 메일 대기열에 전자 메일을 보관하도록 postfix에 지시하는 설정 옵션조차도 작동합니다 (프로덕션 서버로 스테이징 서버를 다시로드 할 때 대기열을 제거 할 수 있습니다).

나는 이것이 가능하다는 것을 알고 있으며, 꽤 일반적인 요구처럼 보이는 온라인에 대한 좋은 해결책을 찾지 못했습니다.

감사!

답변:


12

전자 메일을 파일에 기록하는 파이프 명령으로 새 전송을 만들었습니다.

원래:

  1. 이메일을 소유 할 사용자를 작성하거나 기존 이메일을 사용하십시오. 내가 전화 했어email
  2. mkdir /home/email/bin
  3. 다음 스크립트를 넣으십시오 /home/email/bin/mail_eater(PHP를 사용하지만 원하는 언어로 자신의 버전을 작성할 수 있으며 stdin을 파일에 추가합니다).

    #!/usr/bin/php
    <?php
    $fd = fopen("php://stdin", "r");
    $email = "";
    while (!feof($fd)) {
        $email .= fread($fd, 1024);
    }
    fclose($fd);
    $fh = fopen('/home/email/email.txt','a');
    fwrite($fh, $email."\n-------------------------------------------------------\n\n");
    fclose($fh);
    
  4. chmod a+x /home/email/bin/mail_eater
  5. touch /home/email/email.txt
  6. chmod a+r /home/email/email.txt
  7. 에 다음 줄을 추가하여이 파일을 사용하여 새 전송을 작성하십시오 master.cf.

    file_route unix -    n    n    -    -    pipe user=email  argv=/home/email/bin/mail_eater
    
  8. 다음에서 기본 전송으로 사용하십시오 main.cf.

    default_transport = file_route
    

:)


3

해당 도메인을 $mydestination에 넣을 수 main.cf있으므로 postfix는 도메인을 로컬로 제공합니다.

원하는 경우 다른 로컬 사용자를 설정하거나 로컬 포괄 주소를 설정하여 하나의 계정으로 이메일을 전달할 수 있습니다. 자세한 내용은 여기 ( http://www.postfix.org/ADDRESS_REWRITING_README.html#luser_relay)를 참조하십시오.

모든 도메인의 경우 :

mydestination = pcre:/etc/postfix/mydestinations

그리고 /etc/postfix/mydestinations포함해야합니다

/.*/    ACCEPT

나는 지금 테스트 할 수 없지만 작동해야합니다.


대상 도메인이 어떻게 보이는지 모르겠습니다 (실제 고객 데이터베이스에서 제공). 그래도 링크를 확인하겠습니다.
GomoX

업데이트 해 주셔서 감사합니다. "깨끗한"것처럼 보이지만 문제가 해결되는 것처럼 자체 솔루션을 게시했습니다.
GomoX

의도 한대로 작동하려면 설정도 필요합니다 local_recipient_maps = . 제공 한 링크에 설명되어 있지만 답변에도 언급해야한다고 생각합니다.
jojman

2

시도하십시오 (main.cf에서) :

defer_transports = smtp

그런 다음 대기열 postqueue -p을보고 콘텐츠 를 볼 수 있습니다postcat


0

배포판에 따라 "nullmailer"를 볼 수 있습니다. 네트워크 또는 원격의 다른 SMTP로 릴레이하는 릴레이 MTA입니다. 이것은 유효하지 않은 SMTP 일 수 있으며,이 경우 아마도 시스템의 폴더에있는 대기열에만 넣을 수 있습니다.

데비안과 우분투에서는 시스템의 대체 MTA로 사용할 수 있습니다.


0

이것은 내 블로그 http://blog.malowa.de/2011/04/postfix-as-spam-trap-server.html 에서 복사되고 약간 수정되었습니다 .

Postfix를 nullmailer로 작동하도록 구성 할 필요조차 없습니다. Postfix smtp-sink는 트릭을 수행 하는 깔끔한 도구를 제공합니다 . smtp-sink는 주로 서버를 사용해야하는 SMTP 클라이언트를위한 테스트 도구로 사용됩니다. 따라서 전체 대화를 기록하거나 수신 된 각 메일을 파일로 덤프하도록 구성 할 수 있습니다. 후자는 nullmailer에 필요합니다.

smtp-sink를 구성 할 구성 파일이 없습니다. 모든 것은 명령 행 옵션을 통해 이루어집니다.

smtp-sink -c -d "%Y%m%d%H/%M." -f . -u postfix -R /tmp/ -B "550 5.3.0 The recipient does not like your mail. Don't try again." -h spamtrap.example.com 25 1024

각 매개 변수를 자세히 살펴 보겠습니다.

-u postfix
Runs the program under the user "postfix"
-R /tmp/
Sets the output directory to /tmp/. In this directory the mails will be stored. If you have a high spam volume (hundreds of Spam per minute) it is recommended to write the mails to a ramdisk
-d "%Y%m%d%H/%M."
Writes the mail to a directory of the format "YearMonthDayHour" and in this directory the files are name "Month.RandomID". Note that the dates are in UTC
-c
Write statistics about connection counts and message counts to stdout while running
-f .
Reject the mail after END-OF-DATA. But the mail will be saved. Cool, isn't it?!
-B "550 5.3.0 The recipient does not like your mail. Don't try again"
This is the rejection message after END-OF-DATA.
-h spamtrap.example.com
Announce the hostname spamtrap.example.com
25
The port to listen on. Can be prepended with an IP or host if you want to bind on a special interface.
1024
The backlog count of connections that can wait in the TCP/IP stack before they get a free slot for sending mail.

smtp-sink 매뉴얼 페이지에서 자세한 정보를 찾을 수 있지만, 이는 모든 스팸 트랩을 실행하는 데 중요한 정보입니다. 이 구성에서 프로그램은 모든 발신자가 IPv4 및 IPv6을 사용하는 수신자에게 모든 크기의 메일을 수락합니다. 유일한 제한 사항은 1024 개의 대기 연결로 256 개의 동시 연결 만 가능하며 프로그램에 실험 플래그가 지정되어 있다는 것입니다. 따라서 프로덕션 환경에서는 smtp-sink를 사용하지 마십시오.

-B 옵션은 최신 버전의 Postfix에서만 유효합니다. 2.7.1에서는 누락되었습니다. 2.8.2에는 존재합니다. 그 사이 어딘가에 소개되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.