from 和ジオ

Fedora CORE (2) + postfix + dovecot + fetchmail で メール処理用IMAPサーバを作る

Linux 環境構築

Fedora CORE (2) + postfix + dovecot + fetchmail で メール処理用IMAPサーバを作る

IMAPサーバの構築メモです。 IMAPは、サーバでメールボックスを保持するため、同じメールボックスを複数台の クライアントで一元管理する場合に非常に便利です。また、サーバ側の ディスクが冗長化されていれば、大切なメールも安心です。

ここでは、いくつかのソフトを組み合わせ、外部POP3 のメールを自動的に 取得し、それをIMAPサーバ経由でメールクライアントに表示させることに より、プロバイダ等 IMAP 対応していないメールサーバを擬似的にIMAP で扱えるようにするローカルサーバを立ち上げてみます。

使わせてもらったソフトウェア

OS Fedora CORE 2 Linux postfix メールサーバと dovecot IMAPサーバと、fetchmailデーモンを起動
postfix postfix-2.0.18-4 メールサーバ。Fedora CORE 2 パッケージ
dovecot dovecot-0.99.10.5-0.FC2 POP3/IMAPサーバ。Fedora CORE 2 パッケージ
fetchmail fetchmail-6.2.5-2 POP3 クライアント。Fedora CORE 2 パッケージ
Mozilla Thunderbird Thunderbird Setup 1.0.exe Windows 上で使っているメーラです。

概要

  1. fetchmail が一定の間隔で外部のPOP3サーバにメールを取りに行く
  2. POP3サーバにメールがあれば fetchmail が postfix のメールボックスにそのメールを転送する
  3. クライアントからサーバにIMAP の要求があれば dovecot がユーザの postfix メールボックスを操作する

という感じになります。 ということで、まず postfix のインストールからです。

postfix メールサーバ

postfix は、Fedora CORE の標準パッケージとして用意されているので これをインストールします。ついでに、sendmail がはいっている場合は 削除しておきます。

# yum install emacs
# rpm -e sendmail

インターネット上のメールサーバになるわけではないので、 これといった設定はありません。 メールボックスを作成するディレクトリを各ユーザのホームディレクトリに する設定と、postfix がメールを受け取るインターフェースの限定を行います。

# vi  /etc/postfix/main.cf
inet_interfaces = localhost
home_mailbox = Maildir/

dovecot POP3/IMAPサーバ

dovecot も Fedora 標準パッケージなのでこちらをインストールします。

# yum install dovecot

devecot に対して、IMAP を使うことと、扱うメールボックスディレクトリを指定する 設定をします。これで、postfix のメールボックスとクライアントが IMAP で結ばれます。

# vi /etc/dovecot.conf
protocols = imap
default_mail_env = maildir:‾/Maildir

とりあえず試験

ここまでで、サーバのメールボックスを IMAP で見ることができる ようになったはずなので、クライアントから接続試験してみます。

# /etc/init.d/postfix start
# /etc/init.d/dovecot start

これで postfix と dovecot サーバが起動します。とりあえず、 試験メールをサーバ上で mail コマンドを使い自分宛に送っておきます。

$ whoami
[ユーザ名]
$ mail [ユーザ名]
Subject: TEST
This is test mail.

.
Cc:

このサーバ上で完結するメールなので、宛先は[ユーザ名]だけで大丈夫です。 メールの本文の最後で「.」だけいれてエンターすると終了です。 mail コマンドより送信されたメールは先ほど設定した postfix により、

/home/[ユーザ名]/Maildir/

に配信されたはずです。ディレクトリがあるか確認してください。

次に、メーラにこのサーバのIMAPアカウントを追加します。 ここでは、Windows版のMozilla Thunderbird を使いました。 サーバ名に、devecot を動かしているサーバのIPアドレスを、 ユーザに、サーバの[ユーザ名]を設定します。パスワードも [ユーザ名]のものになります。

うまくいけば、先ほど送ったメールが inbox ディレクトリに 表示されます。また、メールクライアントが必要とするメールフォルダ (ゴミ箱等)も作成されるはずです。(なんか漢字だと怖いことに なるのですが、動きます...)

fetchmail

fetchmail も Fedora 標準パッケージなのでこちらをインストールします。

# yum install fetchmail

fetchmail の設定はユーザごとになります。ユーザホームディレクトリの .fetchmailrc を 取得したい POP3 にあわせて設定します。

$ vi ‾/.fetchmailrc
# ログファイル保存先 (適宜変更)
set logfile "/home/[ユーザ名]/fetchmail.log"

# fetchmail のエラー送信先
set postmaster [ユーザ名もしくはroot]
set no bouncemail

defaults
    protocol pop3
    flush
    no mimedecode
    smtphost localhost

poll [外部POP3メールサーバ(mail.hogehoge.com等)]
    protocol pop3
    user [外部POP3メールサーバユーザ名]
    password [外部POP3メールサーバパスワード]

このファイルにはパスワードが書いてあるので、パーミッションを 自分にしか見えないように変更します。

$ chmod 600 .fetchmailrc

「smtphost localhost」 の記述で取得したメールが postfix に渡されます。 外部POP3 の設定はメーラに設定するのと同じ要領ですればOKです。

(特殊な例) Fedora CORE (2) Linux 設定 (fetchmail - GMail 設定)

「flush」 の記述は、fetchmail が受信したメールをPOP3 から削除する設定です。 実験している間は、flush ではなく 「keep」 としてサーバにメールを残した ほうがいいです。postfix への転送に失敗して 大切なメールが闇に葬られると大変なので・・・。

できたら、POP3 に対してメールを送り、fetchmail が取り込んでくれるか ためしてみます。 とりあえず、 POP3 宛にメーラでメールを送信します。 その後、

$ fetchmail

としてみてください。エラーがでなければまずは合格。この操作の後、 先ほどメーラに設定した IMAPアカウントを見てみてください。 うまくいっていれば、送ったメールが取り込まれ表示されているはずです。 メールが表示されない場合は、メールが転送される順番を考えて設定を見直してみてください。

うまく取り込めることが確認できたら、fetchmail を一定間隔で 起動するようにします。ここでは、 /etc/init.d/ に いただきもののスクリプトを入れました。各ユーザホームをみて .fetchmailrc があれば 180秒ごとに起動するデーモンとして登録してくれます。 すばらしい!。

自宅メール環境の構築さんより

# vi /etc/init.d/fetchmail

# chkconfig: 345 99 20
#
# description: Fetchmail auto start script

# Source function library.
. /etc/rc.d/init.d/functions

# See how we were called.
case "$1" in
start)
    for user in `ls /home/`
    do
            if [ -f /home/$user/.fetchmailrc ]; then
                    echo "fetchmail for $user starting..."
                    su $user -c "/usr/bin/fetchmail --daemon 180"
            fi
    done
    ;;
stop)
    # Stop daemons.
    for user in `ls /home/`
    do
            if [ -f /home/$user/.fetchmailrc ]; then
                    echo "fetchmail for $user stoping..."
                    su $user -c "/usr/bin/fetchmail --quit"
            fi
    done
    ;;
*)
    echo "Usage: $0 {start|stop}"
    exit 1
esac

exit 0

ファイルを作成したら、

# /etc/init.d/fetchmail start

して、うまく起動することを確認してください。

自動起動

最後に、各ソフトをサーバ起動時に自動起動するように設定しておきます。

# chkconfig --add postfix
# chkconfig --add dovecot
# chkconfig --add fetchmail
# chkconfig --level 345 postfix on
# chkconfig --level 345 dovecot on
# chkconfig --level 345 fetchmail on
#
# chkconfig --list postfix
postfix         0:オフ  1:オフ  2:オン  3:オン  4:オン  5:オン  6:オフ
# chkconfig --list fetchmail
fetchmail       0:オフ  1:オフ  2:オフ  3:オン  4:オン  5:オン  6:オフ
# chkconfig --list dovecot
dovecot         0:オフ  1:オフ  2:オフ  3:オン  4:オン  5:オン  6:オフ

これで設定は完了です。 しばらくは、POP3 の様子も別なメーラ等で 監視して運用してみてください。

最後に

この記事は、Fedora CORE (2) + emacs + ATOK X で出先接続用サーバ構築 の続きです。メールをどの環境からも一元的に扱おうというモクロミです。 あと、ここで使った Linux サーバが RAID1 を組んでいるのでデータの保護にも よいかな、と思いやってみました。

ということで、emacs - Mew からも IMAP接続して使う予定です。 一応つながることはつながっているのですが、IMAPフォルダを Mew がソートしてくれないなど、まだまとまっていないので、 この件についてはそのうち書きます。 (書きました!)

それでは、良いメール環境をお楽しみください。(へんなオチ)