• 空メールを受信したい
  • ケータイからメールで画像アップロードを受け付けたい

など、複数のアドレスを1つの宛先(パイプ経由でプログラムに渡す)にまとめたい時にpostfixでは正規表現でのalias_mapが使えます。
しかし、この正規表現の指定方法が曲者でした。

エイリアスで正規表現を使うには main.cf に以下のように設定をして、

alias_maps = hash:/etc/aliases,regexp:/etc/postfix/aliases.reg

/etc/postfix/aliases.reg に正規表現と宛先のペアを書いていくだけです。

さてここで問題の正規表現の書き方ですが、例えば [email protected] (xxxxは数字4桁) というアドレスを hogeに転送したい場合、

/^hoge[1-9]{4}$/ hoge

でも

/^hoge[1-9]{4}@example.com$/ hoge

でも期待通りになりません。

正解は

/^hoge[1-9]{4}(@example.com)?$/ hoge

です。
つまり「ドメイン付でもドメインなしでもヒットするように正規表現を書かなければいけない」のです。

なぜかというとpostfixの仕様が以下のようになっているためです。

  • local_recipient_mapsでのユーザの存在確認の際、正規表現テーブルではドメイン付きで検索している
  • それに対してlocalがalias_mapsとして検索する時にはローカルパートのみで検索している

なんだか悲しい仕様ですね。。

参考

コメントは受け付けていません。