せっかく,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 とかの正規表現が書かれているので,必要に応じてどうぞ.