Postfixサーバーが各メッセージを特定のトランスポートに配信し、2番目のサーバーに中継することを望みます。 master.cfには、次のトランスポートがあります。
zarafa unix - n n - 10 pipe
flags= user=vmail argv=/usr/bin/zarafa-dagent ${user}
Postfixを2つのトランスポートに配信できないため、おそらく必要なのは、おそらくprocmailを使用して、zarafa-dagentに配信し、2番目のサーバーにリレーするラッパートランスポートです(forwardアドレスへ; リレー 2番目のサーバーへ)。
Sendmailなどを呼び出すスクリプトにすることもできますが、現時点では、続行する方法がわかりません。
bcc_mapsのようなものは機能しません。これは、正しいX-Original-ToヘッダーとDelivered-Toヘッダーが生成されないためです。中継先のサーバー上の元のサーバーと同じ受信者に送信する必要があります。
編集:多分私は何かを明確にする必要があります:バックアップマシンでは、プライマリと同じメールボックスを持つことはできません。箱は1つだけです。すべてのメールボックスがあれば、そのサーバーへのBCCで問題ありません。ただし、プライマリでは、電子メールはカスタムzarafaトランスポートを使用して配信されるため、セカンダリにメールボックスが何であるかを知らせる方法はありません。したがって、私はそのサーバーに中継したかったのですが、そのサーバーは、問題のドメインに対してローカルであると見なします。そうすれば、Delivered-Toヘッダーは、元のRCTPが何であるかを教えてくれます。
助けを借りて このページ 、私はもうすぐそこにいると思いますが、まだです。 bashから2番目のサーバーに中継する方法がまだわかりません。
Master.cfでトランスポートを作成しました:
filtertest unix - n n - 10 pipe
flags=Rq user=filter null_sender=
argv=/usr/local/bin/filter-test.sh -f ${sender} -- ${recipient}
私はcontent_filterオプションをsmtpトランスポートに含めました(それが機能するときにsmtpsにも追加します):
smtp inet n - - - - smtpd
-o content_filter=filtertest:dummy
Filtertestスクリプトがあります:
#!/bin/bash
# Simple Shell-based filter. It is meant to be invoked as follows:
# /path/to/script -f sender recipients...
# Localize these. The -G option does nothing before Postfix 2.3.
INSPECT_DIR=/var/spool/filter
SENDMAIL="/usr/sbin/sendmail -G -i" # NEVER NEVER NEVER use "-t" here.
# Exit codes from <sysexits.h>
EX_TEMPFAIL=75
EX_UNAVAILABLE=69
# Clean up when done or when aborting.
trap "rm -f in.$$" 0 1 2 3 15
# Start processing.
cd $INSPECT_DIR || {
echo $INSPECT_DIR does not exist; exit $EX_TEMPFAIL; }
cat >in.$$ || {
echo Cannot save mail to file; exit $EX_TEMPFAIL; }
# Relay message to backup server
#TODO: how?
$SENDMAIL "$@" <in.$$
exit $?
残っているのは、このbashスクリプトrelay(転送しない)をtmpファイルの内容を2番目のサーバーに作成するにはどうすればよいですか?
私は似たようなことをする必要がありました、そしてあなたの質問については、接尾辞は一度に複数の配信を許可していないようです。
問題を解決する方法は、小さなラッパーを使用してリクエストをキャッチし、必要なディスパッチを実行することです。
唯一の問題は、接尾辞に「OK、配信されました!」と表示されることですが、配信が成功したかどうかは実際にはわかりません。
とにかく、これは私のラッパーのコードです:
#!/bin/bash
USER=`echo $2 | awk -F"@" '{print $1}'`
NEXTHOP=`echo $2 | awk -F"@" '{print $2}'`
/usr/bin/Sudo -u vmail /usr/bin/procmail -t -m USER=$USER NEXTHOP=$NEXTHOP /etc/procmailrc
「USER」は電子メールに含まれるユーザー名であり、「NEXTHOP」は電子メールに含まれるドメインです...明確にするために:USER @NEXTHOP。
メッセージはstdinとしてスクリプトに渡され、メッセージをフェッチして独自の裁量で使用できるようになります。
お役に立てば幸いです:)
roundhouse を試して使用するか、 MIMEDefang をインストールし、 add_recipient を使用して、必要な他のサーバーに電子メールを中継できます。