Postfixでヘッダを追加/削除する


背景

メールサーバ側で特定のヘッダをメールに追加/削除したい場合がある。
Xヘッダをつけて他のサーバで特殊な処理を依頼する場合など。

検索するとheader_checksが出てくる。
header_checksで大抵の要望を実現できるが、実現出来ないこともある。
また、条件によってはheader_checksではなく、smtpd_data_restrictionsを利用する場合がある。
この記事ではその辺りの話を自分の理解した限りの内容でまとめる。

設定例

5つの例を元にPostfixにおけるヘッダの追加方法と、できないことを説明する。

X-HOGEHOGEヘッダを追加し、その値をFromヘッダと同じにする。

挿入したいヘッダの値を他のヘッダから持ってくる場合は以下のようにすれば良い。

  • /etc/postfix/main.cf

    header_checks = pcre:/etc/postfix/header_checks

  • /etc/postfix/header_checks

    /^FROM:\s*(\S+)/ RREPEND X-HOGEHOGE: ${1}

必ずX-HOGEHOGEヘッダを追加して固定の値を入れる。

配送されてきたメールに対して、かならずヘッダを追加する場合は以下のようにすれば良い。

  • /etc/postfix/main.cf

    smtpd_data_restrictions = check_client_access cidr:/etc/postfix/add_user_header

  • /etc/postfix/add_user_header

    0.0.0.0/0 PREPEND X-HOGEHOGE: kotei

    見ればわかると思うが、特定のIPから配送されてきたメールにだけ、何かを追加したい場合も上記で実現できる。

Aヘッダがない場合に、Bヘッダを付与する。

「ヘッダがない」という判定がheader_checksではできない。
ヘッダが正規表現に一致するか、否かでしか条件分岐できないため。

Aヘッダがある、かつBヘッダもある場合にCヘッダを付与する。

ヘッダは一行ずつ処理される。
そして処理結果を結果を保存することができないので、複数のヘッダを条件にしたヘッダ付与はできない。

結論

単純なヘッダ付与は設定ファイルだけで実現できるが、
自由に何かやりたければMilterを実装するのが手っ取り早いと思われる。

参照