複数relayhost、transport、relayhost+SMTP認証、virtual_mailbox

# 参考

* [Postfix でメールリレーの設定 (SMTP クライアント + SMTP Auth) - maruko2 Note.](http://www.maruko2.com/mw/Postfix_%E3%81%A7%E3%83%A1%E3%83%BC%E3%83%AB%E3%83%AA%E3%83%AC%E3%83%BC%E3%81%AE%E8%A8%AD%E5%AE%9A_%28SMTP_%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88_%2B_SMTP_Auth%29)
* [postfix のリレー先の複数対応: インフラ担当者の備忘録](http://itserver.seesaa.net/article/399045015.html)
* [postfix の550エラーではまった・・・ | Res-Log](http://ur.edu-connect.net/archives/26111)


# 設定

## 複数書くと下が優先される

```bash:
relayhost = [smtp.gmail.com]:587
relayhost = [smtp.abc.com]:587
```

* [hostname] のように、転送先ホスト名を [ ] で囲むと MX検索をしなくなる。

## 送信先アドレスで変更する

```bash:
transport_maps = hash:/etc/postfix/transport
```

```bash:/etc/postfix/transport
example.com     :
abcdefg.co.jp   smtp:[smtp.gmail.com]:587
*               error: Local delivery only!
```

* 1行目: リレーせず直接ローカル配信
* 2行目: 特定のドメインをリレーさせる
  * `relay_domains = example.com, abcdefg.co.jp`でもよい。
* 3行目: その他全てをリレーさせる。が`error`を書いておくとマッチしたものを送信させなくする。開発時便利
  * main.cfに `default_transport = error` でも同じ。

```bash:
postmap /etc/postfix/transport
```

## SMTP認証のパスワードを設定

* relayhost に指定した宛先を全てについてSMTP認証のパスワードを設定します。

```bash:
[smtp.gmail.com]:587 username:password
[smtp.abc.com]:587 username:password
```

```bash:設定反映
postmap /etc/postfix/relay_password
systemctl postfix restart
```

----

# virtual_mailbox

```bash:main.cf
virtual_alias_maps = hash:/etc/postfix/virtual, pcre:/etc/postfix/pcre_alias

virtual_transport = vmail-procmail
vmail-procmail_destination_recipient_limit = 1
virtual_mailbox_base = /home/vmail
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_mailbox_domains = hash:/etc/postfix/vmaildomains

virtual_minimum_uid = 500
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
```

## virtual_alias_maps

```bash:virtual
postmaster@local.com   root
```

```bash:pcre_ailas
/^info_[\w_\-]+@local\.com$/    info
```

info_12345@local.com を info@local.com に配送させる。

## virtual_transport

* [Postfix + Maildrop Howto](http://www.postfix-jp.info/trans-2.2/jhtml/MAILDROP_README.html)

```bash:master.cf
vmail-procmail unix - n n - - pipe
  flags=DORhq user=vmail:vmail argv=/usr/bin/procmail -t -m /home/vmail/.procmailrc ${recipient}
```

## virtual_mailbox_base

* HOMEディレクトリ指定。

## virtual_mailbox_maps

```bash:vmailbox
user1@local.com  .
user1@test.local.com  .
info@local.com  .
info@test.local.com  .
```

## virtual_mailbox_domains

* [virtual_mailbox_domains (デフォルト: $virtual_mailbox_maps)](http://www.postfix-jp.info/trans-2.2/jhtml/postconf.5.html#virtual_mailbox_domains)
* [VIRTUAL_README.jp](http://www.postfix-jp.info/trans-2.0/readme/VIRTUAL_README.jp)

## virtual～uid

* セキュリティ対策用にUIDをずらす

## /home/vhost/.procmailrc

* [Debian squeezeでvirtual mailにprocmail](http://hikikomorisyuhu.seesaa.net/article/216532084.html)
* [procmailrc - ファイルのフォーマットと規約の説明 - Linux コマンド集 一覧表](http://kazmax.zpp.jp/cmd/p/procmailrc.5.html)

```bash:
MAILDIR=$HOME/Maildir/
DEFAULT=$MAILDIR
SHELL=/bin/sh

_TO=$1

_DOMAIN=$(echo $_TO | awk -F@ '{print $2}' | tr '[:upper:]' '[:lower:]')
_USER=$(echo $_TO | awk -F@ '{print $1}' | tr '[:upper:]' '[:lower:]')
SWITCHRC=$HOME/$_DOMAIN/$_USER/.procmailrc
```

## /home/vhost/$_DOMAIN/$_USER/.procmailrc

```bash:/home/vhost/local.com/user1/.procmailrc
MAILDIR=$HOME/local.com/user1/Maildir/
DEFAULT=$MAILDIR
LOGFILE=$HOME/local.com/user1/procmail.log

:0 c
! realuser@mycorp.jp
```