fetchmail/procmail

[`evernote` not found]
Bookmark this on Hatena Bookmark
Share on Facebook
LINEで送る

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