web-dev-qa-db-ja.com

特定のヘッダー付きの電子メールのみを送信するようにPostfixを構成するにはどうすればよいですか?

ローカル開発をセットアップしていますVMそしてローカルメールボックスに送信されたすべての電子メールをリダイレクトすることができましたエントリvirtual_alias_maps/.*/ usernameを使用します。

追加したいのは、notメールをローカルメールボックスにリダイレクトするオプションですifメールに特定のヘッダーが含まれています。

言い換えれば、送信メールに特定のヘッダーが見つかった場合は送信しますが、ヘッダーがない場合はローカルメールボックスにリダイレクトする必要があります。

Postfixを使用してこれをどのように達成できますか?

あなたの助けをどうもありがとう!

5
thasmo

Tpml7からの擬似コードのスキャッピング

if header exist (postfix will checks via header_cheks)
    no rewrite --> different instance
else
    rewrite with virtual_alias_maps same instance

AFAIKポストフィックスは、特定のヘッダーが存在する場合に電子メールをリダイレクトできます。 man header_checks のREDIRECT機能を参照してください。

残念ながら、上記の擬似コードに基づいて、リクエストはメールをリダイレクトしています特定のヘッダーが存在しない場合。私はすでにいくつかの簡単な回避策を試しました。しかし、リクエストが直接サポートされていなかったため、このソリューションは少し複雑でした。特に、このソリューションは postfix multi instance について学習するために必要です。

私はここに概要を書きます-正確なステップバイステップではありません-、何かがまだ曖昧であるかどうか気軽に尋ねてください。


これを行うには、2つのマルチインスタンスが必要です。最初のインスタンスはheader_checksを実行し、2番目のインスタンスは通常の送信を実行しています。

最初のインスタンスには、master.cfで定義された2つのsmtpdデーモンがあります。 1つのデーモン(デフォルト)は*:25でリッスンし、2番目のデーモンは127.0.0.1:12525でリッスンします。

2番目のインスタンスは127.0.0.1:22525でリッスンします

ファーストインスタンス

##main.cf

# your header filter
header_checks = pcre:/path/to/header_checks

# no rewriting
receive_override_options = no_address_mappings

# send to second instance
relayhost = [127.0.0.1]:22525
virtual_alias_maps = pcre:/your/catch-all

##master.cf

# second smtpd but with rewriting enabled
[127.0.0.1]:12515 inet  n       -       n       -       -       smtpd
    -o receive_override_options=

# /path/to/header_checks
/^MyHeader/  FILTER smtp:[127.0.0.1]:12525

2番目のインスタンス

Header_checks、relayhost、virtual_alias_maps、receive_override_options(通常の接尾辞のインストール)を使用せずに、最初の接尾辞インスタンスのように設定するだけです。 [127.0.0.1]:22525でのみリッスンするようにmaster.cfを設定します。 myhostnameを設定して、最初のインスタンスとは異なるようにします。

1
masegaloeh

まず、master.cfで2つのsmtpdプロセスを定義します。1つはリライトが有効で、もう1つはリライトが無効です。書き換えが有効になっているSMTPDは、デフォルトでmaster.cfに存在していました。今、私たちはこれらの行になります

127.0.0.1:2525 inet n  -       n         -       2000     smtpd
    -o receive_override_options=no_header_body_checks,no_address_mappings

これにより、別のsmtpdプロセスが有効になります

  • ポートlocalhostIPポート2525でリッスンします
  • Header_checks機能と書き換え機能を無効にします。

ここにあなたの要求の擬似コードがあります

if header exist (postfix will checks via header_cheks)
    no rewrite 
else
    rewrite with virtual_alias_maps

そのロジックを header_checks で実装します。

この行をmain.cfに追加します

 header_checks = regexp:/etc/postfix/mycustomheader

/etc/postfix/mycustomheaderの内容

/^X-Your-Header/  FILTER smtp:[127.0.0.1]:2525

使い方

PostfixがメッセージでX-Your-Headerを検出すると、前に定義したように、電子メールを2番目のsmtpdプロセスにリダイレクトします。ヘッダーが存在しない場合、電子メールは書き換えが有効になっているデフォルトのsmtpdプロセスを通過します。

1
tpml7