fetchmail: 外部のメールサーバーからのメールの受信

fatchmail メールを取り込む


以前、構想だけ書いて放置していた、全てのメールを自動で家の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 だけで済ましてみましょう。

というわけで、次は、簡単な procmail の設定を書いたあと、IMAPサーバーの構築に入ります。