web-dev-qa-db-ja.com

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

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

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

そこで、ローカルのPostfixインストールをセットアップして、すべての電子メールをリレーせずに(1つ以上の)ファイルに格納したいと思います。実際には、送信された電子メールをチェックすることが可能である限り、どのように格納されるかは特に気にしません。メールをメールキューに保持するようにpostfixに指示する設定オプションでも機能します(本番環境からのコピーをステージングサーバーに再ロードすると、キューを削除できます)。

私はこれが可能であることを知っています。かなり一般的なニーズのように思われるものに対して、オンラインで良い解決策を見つけられませんでした。

ありがとう!

9
GomoX

電子メールをファイルに書き込むパイプコマンドを使用して、新しいトランスポートを作成しました。

基本的に:

  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
    

そこ :)

12
GomoX

これらのドメインを$mydestination in main.cf、postfixはローカルに配信します。

必要に応じてさまざまなローカルユーザーを設定したり、ローカルキャッチオールアドレスを設定して1つのアカウントにメールを配信したりできます。詳しくはこちらをご覧ください http://www.postfix.org/ADDRESS_REWRITING_README.html# luser_relay

すべてのドメイン:

mydestination = pcre:/etc/postfix/mydestinations

および/etc/postfix/mydestinationsには

/.*/    ACCEPT

今はテストできませんが、動作するはずです。

3

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

defer_transports = smtp

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

2
Arek B.

これは私のブログからコピーされ、少し変更されています 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では存在します。その中間のどこかで導入されました。

0
mailq

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

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

0
jishi