Exim4でメールアドレスを量産する

EメールアドレスをGMailのようにサフィックスを付けても通るようにしたかったのでちょっとやってみました。
GMailのように '+' を使うルールだとこれを弾くサービスが増えてきたので、エイリアスの区切りには怪しくないように '.' を使うことにします。例えば

user@hoge.com
user.fuga@hoge.com
user.fuga.piyo@hoge.com

というメールアドレスはぜんぶ user 宛に届くようにします。

以下はDebian Wheezyでの方法です。Exim4を選んだのはDebianを入れると標準でインストールされるから。

Exim4の設定

前提として、インターネット上からメールを受け取れるようにする設定は既に済ませてあるものとします。

それに加えて /etc/exim4/conf.d/router/ 以下に 399_exim4-config_dot_alias を作成するだけです

dot_aliases:
	driver = redirect
	condition = ${if match{$local_part}{\.} {true} {}}
	data = ${sg {$local_part}{\N\..*$\N}{}}@$domain

これで /etc/init.d/exim4 restart すれば完了。エイリアスが欲しいだけならこれで終わりです。

振り分け

本当はこっちがやりたかった事。メールアドレスの量産の他に、自動的に規則的な階層を持つような振り分けをしたかったので以下のようにしました。

方針
  • メールフォーマットにMaildirを使う
  • 振り分けにはprocmailを使う
  • MDADovecotを使い、メール取得にはIMAP4を使うようにする

振り分けルール以外は一般的なMaildir形式の設定をするだけ。

エイリアスに '.' を選んだのは、RFCのメールアドレスでの '.' の扱い方の法則がDovecotにおけるMaildir++の階層の表現方法にとって都合が良く扱いやすかったからというのもあります。

Exim4

Maildir方式に変更。

/etc/exim4/update-exim4.conf.conf の dc_localdelivery= を変更

dc_localdelivery='maildir_home'
Dovecot

dovecot-imapdをインストール。

Maildir形式への変更。

/etc/dovecot/conf.d/10-mail.conf の mail_location の行

mail_location = maildir:~/Maildir
procmail

~/.procmailrc に追加。local-partの '.' の後を切り出してMaildir方式で .INBOX.hoge.fuga/ という名前で出力するという内容

MAILDIR=$HOME/Maildir/
DEFAULT=$MAILDIR
USER=`id -un`

:0
* $ ^To:.*\<$USER\/\..*@
{
dir=`echo "$MATCH" |sed 's/@.*//;s/^/.INBOX/'`
:0
$dir/
}

これでメールボックスにIMAP4でアクセスすると、メールアドレスから作られた階層が見えるようになっていると思います。