せっかく,dovecot でサーバを立てたので,分散しているメールを集約してみる試み.
dovecot の設定は,こちらを参照のこと→dovecotの設定 | hadacchi blog
準備
dovecot が maildir を使って動いている環境は準備すること.
ここに,何らかの手段で pop したメールを振り分けて入れれば終わり.
自動的にポーリングし,フィルタしてローカルの Maildir に配送する手段は,わりと限られている.
今回は,かつて使っていた fetchmail/procmail を使うことにした.
他の選択肢としては,getmail を使う方法もあるけど,今回の場合はどちらにせよ procmail の設定が必要なので,わざわざ mua を変える理由がなかった.
もっと無駄だけど簡単なやり方としては,Sylpheed みたいな mua を使って pop したメールを振り分け機能で振り分けても同じことはできる.
他にも,とにかく pop する機能がついていれば,何でも良い.
fetchmail の設定
ちゃんとドキュメントを読めば,結構簡単に設定できる.
man の他は,ここを参考にした → fetchmailrc - 揮発性のメモ
というか,ほとんどそのまんまになってしまった.
続きの記事にも目を通しておいた方が良いかも → fetchmailrc 注意事項 - 揮発性のメモ
# 管理者 set postmaster LOCALUSERNAME # no bouncemail エラーメールを管理者に送信する # bouncemail エラーメールを差出人に返送する set no bouncemail # デーモン時のログファイル set logfile "/PATH/fetchmail.log" # メールのチェック間隔(秒) set daemon 600 # no spambounce スパム差し戻しを返送しない # spambounce スパム差し戻しを返送する set no spambounce # ------------------------------------- defaults protocol pop3 #----- サーバオプション # no uidl 未読チェックをサーバ側でつける (デフォルト) # uidl 未読チェックをクライアント側でつける uidl #----- ユーザオプション # keep 既読メールを削除しない # no keep 問い合わせ後にサーバ上の既読メールを削除する (デフォルト) no keep # flush 問い合わせ前にサーバ上の既読メールを削除する # no flush 既読メールを削除しない (デフォルト) no flush # no fetchall 未読メールのみの取り込み (デフォルト) # fetchall 全メールの取り込み fetchall # mimedecode MIMEデコードする # no mimedecode MIMEデコードしない (デフォルト) no mimedecode # ------------------------------------- poll SERVERADDR1 proto pop3 user "USERNAME1" pass "PASSWORD1" mda "/usr/bin/procmail -m /PATH/SERVER1.procmailrc" # ------------------------------------- poll SERVERADDR2 proto pop3 user "USERNAME2" pass "PASSWORD2" mda "/usr/bin/procmail -m /PATH/SERVER2.procmailrc" ssl
だいたいこんな感じ.
daemon モードで起動するには,fetchmail -d 600 とかする.
起動時に自動で daemon モードで起こしたい場合,root で使うなら /etc/default/fetchmail で daemon=yes とかで良いと思う.
ただしこの場合,/etc/fetchmailrc が必要.
ユーザー権限の場合,cron で @reboot fetchmail -d 600 とかするのが簡単.
.fetchmailrc は 700 に指定しておかないとエラーを吐いて動かないので注意.
久々に man 読むと,勉強になる.port という指定は古いぜ,って書かれていた.今はserviceで指定するらしい.
procmail の設定
fetchmailrc の mda で procmail を指定すると,.procmailrc とかに従って振り分けされる.
ただし今回は,宛先を見て振り分けるのが難しいので(Bcc で配送されたメールを振り分けられない),
procmail -m procmailrc_file と指定する方法を取る.
Maildir の場合,配置先の文字列の最後を「/」で終わらないといけないので注意.
procmailrc_file の例はこんな感じ.
単にサブディレクトリに突っ込む場合.
MAILDIR=$HOME/Maildir DEFAULT=$MAILDIR/.INBOX.SERVER1/ LOGFILE=$MAILDIR/SERVER1.log
振り分けする場合.
MAILDIR=$HOME/Maildir DEFAULT=$MAILDIR/.INBOX.SERVER2/ LOGFILE=$MAILDIR/SERVER2.log :0 H * ^From:.*(address1@host\.domain|address2@host\.domain) .INBOX.SERVER2.From/ :0 H * ^FROM_MAILER .INBOX.SERVER2.DAEMON/ :0 H * ^TO:.*address3@host\.domain .INBOX.SERVER2.To/
man procmailrc とか読むと,^TO とか ^FROM_MAILER とかの正規表現が書かれているので,必要に応じてどうぞ.