バーチャルドメインでのPostfixのメール受信

top20200130_postfix

ユーザの情報をMySQLが持っていて、それに応じてメールを振り分けるみたいなメールサーバーをPostfix、dovecotなどを使って構築したりすると、どれがどんな仕事をしているのか混乱してきます。自分用メモも兼ねて、図にしてみました。

tkp_IfpZrkvYbeHy3IqfHl5f1HYa5fnVf.png

ざっとした仕様

  • ローカル転送はPostfix自身が行う
  • バーチャルメールはdovecotが配信を行う
  • ユーザ情報はMySQLが持っている。

上から順に説明していきます。

メールをまずはPostfixが受ける

tkp_c3orxU22vvrou2suVDnB.png

メールが届いたらまずはmain.cfのmydestinationに記述されたドメインかどうか判断します。

mydestination = example.com, XXXX.example.com

もし、mydestinationに該当するようであればローカル転送へと回します。ローカル転送は下記の設定で定義されています。

local_transport = local

上の場合はpostfix内で各ローカルメールボックスなどに配信して終わります。この時にhome_mailboxなどのオプションが効いてきます。

ちなみにこのlocalをdovectと書き換えれば、ローカル転送はdovecotに回されます。こうなるとローカル転送はdovecotに委託されたようなものなので、home_mailboxなどのオプションは無視されます。

mydestinationに書かれていないドメイン宛の場合、次にvirtual_mailbox_domainsに該当するか確認されます。もし、virtual_mailbox_domainsに該当しなければメールは自分宛ではなかったので、外部に転送されます。

virtual_mailbox_domains = myvirtualdomain.com, myvirtualdomain2.com ...

virtual_mailbox_domainsに該当する場合、今度はバーチャル転送として処理されます。Po バーチャル転送をどこに回すかはmain.cfの下記項目です。

virtual_transport = dovecot

今回はdovecotなのでそちらに回されます。

dovecotでのメール配信

tkp_aKj84SXKArGPKlQoCyx5.png

さて、バーチャルメールという事でPostfixからdovecotへメールが回されてきました。

dovecotは回されてきたメールをどのメールボックスへ配信すべきかを調べます。この環境ではユーザー情報をMySQLで管理しています。データベースにはユーザーの一覧の他、メールボックスがどこにあるのかという情報が格納されています。dovecotはこれを見て、配信すべきメールボックスを確定します。

また、配信する直前にsieveなどが設定されていた場合、それに従って配信先ディレクトリの振り分けを行います。

これで無事ユーザーのメールボックスに届きました。


top20200130_postfix