メールをリレーする代わりにファイルに保存するようにpostfixを設定するにはどうすればよいですか?


9

ローカル環境で運用サーバーのステージングコピーを実行したい。システムはPHPアプリケーションを実行し、さまざまなシナリオで顧客に電子メールを送信します。ステージング環境から電子メールが送信されないようにしたいと思います。

ダミーの電子メール送信者を使用するようにコードを微調整できますが、本番環境とまったく同じコードを実行したいと思います。別のMTAを使用することもできます(Postfixは本番環境で使用するものにすぎません)が、Debian / Ubuntuで簡単に設定できるものを希望します:)

そこで、ローカルのPostfixインストールをセットアップして、すべての電子メールを(1つ以上の)ファイルにリレーするのではなく保存するようにします。実際、送信された電子メールをチェックすることが可能である限り、私はそれがどのように保存されるかを本当に気にしません。メールをメールキューに保持するように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はそれをローカルに配信します。

必要に応じて、さまざまなローカルユーザーを設定したり、ローカルキャッチオールアドレスを設定して1つのアカウントにメールを配信したりできます詳細については、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 2016

2

(main.cfで)試してください:

defer_transports = smtp

その後、キューpostqueue -pを見てコンテンツを見ることができますpostcat


0

ディストリビューションによっては、「nullmailer」を見ることができます。これは、ネットワークまたはリモートの別のSMTPに中継する中継MTAです。これは無効なSMTPである可能性が非常に高く、その場合はおそらくマシン上のフォルダのキューにのみ入れられます。

debianおよびubuntuでは、これはシステムの代替MTAとして使用できます。


0

これは私のブログhttp://blog.malowa.de/2011/04/postfix-as-spam-trap-server.htmlからコピーされ、わずかに変更されています。

nullmailerとして機能するようにPostfixを設定する必要さえありません。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のmanページを参照してください。これらは、キャッチオールスパムトラップを実行するための重要な情報です。この構成では、プログラムは、IPv4およびIPv6を使用して、任意の送信者から任意の受信者への任意のサイズのメールを受け入れます。唯一の制限は、1024のキュー接続で可能な同時接続は256のみであり、プログラムには試験的なフラグが付けられていることです。したがって、実稼働環境ではsmtp-sinkを使用しないでください。

-BオプションはPostfixの新しいバージョンでのみ有効です。2.7.1では不足しています。2.8.2では存在します。その中間のどこかで導入されました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.