fetchmail: 外部のメールサーバーからのメールの受信
以前、構想だけ書いて放置していた、全てのメールを自動で家のLinuxサーバーに溜めるプロジェクト(いま命名)の進捗状況ですが、とりあえず fetchmail を使うことは確定したので、その設定をメモしておきます。
fetchmail はその名の通り、外部のサーバーに溜まっているメールを受信して、任意の場所に転送するためのプログラムです。
おそらく大抵のLinuxではデフォルトでインストールされているとは思いますが、入っていなかったらまずはインストールします。 Fedora の場合 yum で以下のようにします。
# yum install fetchmail
fetchmail はシステムのデーモンではなく、通常のユーザーアカウントで個別に実行するものです。コマンドラインのオプションで全ての挙動を指定できるのですが、mailの設定なんてそうそう変わるものではないので、~/.fetchmailrc に全部の設定を書いておいて、起動時はオプション無しで動かせるようにしておきます。
$ touch ~/.fetchmailrc $ chmod 600 ~/.fetchmailrc $ vi ~/.fetchmailrc
~/.fetchmailrc はパスワードなども生で書くので、他人が覗けないように、chmodしてパーミッションを制限しておくべきです。~/.fetchmailrcの内容は例えば以下のようになります。
# グローバルオプションの設定 set no bouncemail # 転送失敗の通知は送信者ではなく下記のpostmasterへ送る set postmaster youraccount # エラーメールを受けるアカウント名(defaultは自分) # 全アカウントに共通の設定 defaults protocol APOP # APOPで接続する # uidl # POP3で client-side UIDL を使用する keep # 元サーバーのメールを削除しない # flush # 元サーバーのメールを削除する smtphost localhost # メール転送に使うメール送信(SMTP)サーバーのアドレス to youraccount # 転送先ユーザー名 # メールサーバー設定1 poll server1.example.com user username-of-server1 pass password-of-server1 # メールサーバー設定2 poll server2.example.net user username-of-server2 pass password-of-server2
あとはコマンドラインで fetchmail を起動すれば、指定したサーバーからメールが受信されて、youraccount@localhost へ配送されます。
上記の例では、受信したメールもサーバーに残すようになっているうえ、UIDLも使っていないので、再度 fetchmail を実行したら同じメールが何度でも配送されてしまいます。これは、あくまでテスト用の設定だからで、全ての設定が終わって本番運用になったら、そのへんを書き換えたうえで、crontabに設定することになるかと思います。
今、悩んでいるのは、スパムフィルタをどうするか、ということです。私の持っている全てのメールアカウントは、運営会社は違いますが、いずれもスパムフィルタサービスが付いているので、procmail の振り分けだけでも十分なような気もします。spamassassinぐらいなら後から簡単にprocmailに挟めるので、とりあえずは procmail だけで済ましてみましょう。