ローカル環境で運用サーバーのステージングコピーを実行したい。システムはPHPアプリケーションを実行します。これは、さまざまなシナリオで顧客に電子メールを送信します。ステージング環境から電子メールが送信されないようにしたいと思います。
ダミーの電子メール送信者を使用するようにコードを微調整できますが、運用環境とまったく同じコードを実行したいと思います。別のMTAを使用できます(Postfixは本番環境で使用するものにすぎません)が、Debian/Ubuntuで簡単に設定できるものを希望します:)
そこで、ローカルのPostfixインストールをセットアップして、すべての電子メールをリレーせずに(1つ以上の)ファイルに格納したいと思います。実際には、送信された電子メールをチェックすることが可能である限り、どのように格納されるかは特に気にしません。メールをメールキューに保持するようにpostfixに指示する設定オプションでも機能します(本番環境からのコピーをステージングサーバーに再ロードすると、キューを削除できます)。
私はこれが可能であることを知っています。かなり一般的なニーズのように思われるものに対して、オンラインで良い解決策を見つけられませんでした。
ありがとう!
電子メールをファイルに書き込むパイプコマンドを使用して、新しいトランスポートを作成しました。
基本的に:
email
に電話しましたmkdir /home/email/bin
次のスクリプトを/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);
chmod a+x /home/email/bin/mail_eater
touch /home/email/email.txt
chmod a+r /home/email/email.txt
master.cf
に次の行を追加して、このファイルを使用して新しいトランスポートを作成します。
file_route unix - n n - - pipe user=email argv=/home/email/bin/mail_eater
これをmain.cf
のデフォルトのトランスポートとして使用します。
default_transport = file_route
そこ :)
これらのドメインを$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
今はテストできませんが、動作するはずです。
(main.cfで)試してください:
defer_transports = smtp
その後、キューを見ることができますpostqueue -p
とpostcat
でコンテンツを見る
これは私のブログからコピーされ、少し変更されています 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では存在します。その中間のどこかで導入されました。
ディストリビューションによっては、「nullmailer」を見ることができます。これは、ネットワークまたはリモートの別のSMTPに中継する中継MTAです。これは無効なSMTPである可能性が非常に高く、その場合はおそらくマシンのフォルダのキューにのみ入れられます。
Debianおよびubuntuでは、これはシステムの代替MTAとして使用できます。