Debian Jessie をインストールしている玄箱へ IMAP メールサーバ(Courier-imap)を設置しました。
我が家ではすでに自宅サーバ(FreeBSD 9)で IMAP メールサーバの Courier-imap を稼動させています。単純に FreeBSD から Debian への焼き直しという感じのつもりでしたが、実際にはいろいろと苦労がありました。
メールサーバの設置は結構奥深いものがあって、私自身も全てを体験したわけではありません。今回の記事では、プロバイダのメールサーバに届いているメールを受信して、パソコンのメールソフトウェアでメールを閲覧できる最低限の設定までです。玄箱経由のメール送信はまだできません。
Exim4 のインストール
メール転送ソフトウェア(MTA)の Exim4 をインストールしました。自宅サーバの FreeBSD 9 では MTA に Sendmail を使用していましたが、ここでは Debian 標準の Exim4を使用することとしました。なお今回の記事ではメール送信の部分を省略しますので、 Exim4 の設定も行なっていません。
# apt-get update
# apt-get install exim4
Courier-imap のインストール
単純に家庭内 LAN の中だけでアクセスする場合には、 SSL などによる秘匿化は無理に必要ありませんので、ここでは暗号化なしで設定を行いました。次の通り Courier-imap と gamin の二つをインストールするだけで動作可能です。インストールの途中で「ウェブベースでの管理ソフトウェアのためにディレクトリを作成するか」の問い合わせがありましたが、不要でしたので "NO" で応答しておきました。
# apt-get update
# apt-get install courier-imap gamin
ユーザ・アカウント
IMAP メールサーバの個人データを保管するために、ユーザ・アカウントを玄箱へ作成します。Debian などの Linux マシンを使用している場合には、Linux マシンで使用しているユーザ名で登録するのが後で混乱を防ぐためには有効です。以下は mailuser というユーザ・アカウントを作成した様子を示します。対話式にアカウントを作成しました。
# adduser mailuser (mailuser でアカウントを作成)
Adding user `mailuser' ...
Adding new group `mailuser' (1001) ...
Adding new user `mailuser' (1001) with group `mailuser' ...
Creating home directory `/home/mailuser' ...
Copying files from `/etc/skel' ...
Enter new UNIX password: (希望するパスワードを入力)
Retype new UNIX password: (再度パスワードを入力)
passwd: password updated successfully
Changing the user information for mailuser
Enter the new value, or press ENTER for the default
Full Name []: IMAP Mailuser
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] y
IMAP メールサーバ用ディレクトリ作成
一度玄箱からログアウトした後、再度上記で作成したユーザ・アカウントでログインし直します。ログイン出来た場所がユーザのホーム・ディレクトリです。このホームディレクトリへ IMAP メールサーバ用ディレクトリを作成することとなります。 su コマンドで特権ユーザへ昇格した後、maildirmake コマンドで IMAP メールサーバ用のディレクトリを作成します。
$ su
Password: (パスワードを入力)
# maildirmake Maildir
# chown mailuser:mailuser -R Maildir
IMAP メールサーバの動作確認
以上で IMAP メールサーバの最低限のインストールが終了しました。動作するか確認するために、手元のパソコンの IMAP 対応のメールソフトウェア(Thunderbirdなど)で玄箱の IMAP サーバへメール設定をしました。Thunderbird では対話式に玄箱の IP アドレスやユーザ・アカウントを入力すると、自動的に玄箱のポートを捜索してメール設定をしてくれるはずですが、何故か上手く設定できませんでした。そこで手動で設定しました。
(2016-01-03 追記:Thunderbird のバージョンによっては自動設定が正常にできるようです。)
Thunderbaird の例
サーバの種類:IMAP サーバ
サーバ名:(玄箱の IP アドレス)
ユーザ名:(上記で作成したユーザ・アカウント)
ポート:143
セキュリティ設定
接続の保護:なし
認証方式:平文のパスワード認証
|
ユーザ名などを入力して設定を開始しました。 |
|
自動設定はできませんでした。手動で設定しました。 |
|
「接続する上での危険性を理解しました」へチェックを入れて「完了」ボタンで設定終了 |
Fetchmail と Procmail のインストール
上記で IMAP メールサーバへアクセスすることが出来たところで、プロバイダのメールサーバまでに到達しているメールを玄箱の IMAP メールサーバへ読み込むためのソフトウェアの Fetchmail と Procmail をインストールします。
なおメールの流れは次のようになります。
[プロバイダ] - [Fetchmail] - [Procmail] - [Courier-imap]
# apt-get install fetchmail
# apt-get install procmail
Fetchmail の設定
設定ファイル(.fetchmailrc)を次のように設定しました。なお定期的にメールを読みこませる方法は、Fetchmail のデーモン機能ではなく、cron で行わせるようにしました。ここでは Gmail からメールを受信することを前提に記述しています。
$ touch .fetchmailrc
$ chmod 600 .fetchmailrc
$ vi .fetchmailrc
--- .fetchmailrc の内容 ---
set nobouncemail
defaults
uidl
no mimedecode
keep (メールをサーバへ残す場合)
poll pop.gmail.com
protocol imap (または pop3)
port 993 (または 995)
username "(ユーザ名)@gmail.com"
password "(パスワード)"
ssl
# fetchall (テスト時に再度全てのメールを読み出すとき)
mda "/usr/bin/procmail"
Fetchmail の受信テスト中に発見した問題ですが、玄箱のホスト名 "kurobox" の名前の解決ができておらず、受信エラーとなっていました。そこで /etc/hosts を修正しました。
# vi /etc/hosts
127.0.0.1 localhost
127.0.1.1 kurobox (この部分を追加)
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
/etc/default/fetchmail は、デーモン動作用のファイルです。今回は修正しません。
START_DAEMON=no (no のままにしておきます)
/etc/fetchmailrc もデーモン動作で必要ですが、ここでは必要ありません。
Procmail の設定
設定ファイル(.procmailrc)を次のように設定しました。Procmail は宛先や差出人などの条件によってメールを保存する場所を変更したり、余所へ転送させる機能があります。今回は基礎の基礎ということで、条件分岐(レシピ)を記述せず、全て Courier-IMAP で使用する Maildir へ転送させる内容です。
$ touch .procmailrc
$ chmod 600 .procmailrc
$ vi .procmailrc
--- .procmailrc の内容 ---
PATH=/bin:/usr/bin:/usr/local/bin
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/ (※)
LOGFILE=$MAILDIR/procmaillog
LOCKFILE=$HOME/.lockmail
(※)分岐条件(レシピ)に当てはまらないものは全て "DEFAULT=" で指定したディレクトリへ配送されます。ここでは条件分岐がありませんので、Maildir へ全て配送されます。
動作確認(単独動作)
以上で設定は終了です。単発で動作させて異常が発生しないか確認しました。もし問題があればネット上を検索して対処してください。
$ fetchmail
↓
プロバイダのメールサーバへ溜まっていたメールが次々と受信されるはずです。
↓
reading message (ユーザ名)@gmail.com@gmail-pop.l.google.com:324 of 324 (2402 header octets) (37578 body octets) not flushed
動作が終わったところで、操作するパソコンのメールソフト(Thunderbird など)で確認をしてください。
「受信トレイ」の部分へメールが受信されていれば成功です。
下記のような結果となった場合には認証エラーですので設定を見直してください。
fetchmail: Authorization failure on (ユーザ名)@gmail.com@pop.gmail.com
fetchmail: For help, see http://www.fetchmail.info/fetchmail-FAQ.html#R15
fetchmail: Query status=3 (AUTHFAIL)
cron で定期受信
cron を使って fetchmail コマンドを定期的に実行させて、メールを受信させるようにしました。ここでは 5 分おきに受信するようにしました。
$ crontab -e
# m h dom mon dow command
*/5 * * * * /usr/bin/fetchmail >/dev/null 2>&1
動作確認(cron の定期受信)
上記の cron の設定が終了したら、既に Fetchmail による自動受信は開始されています。
Fetchmail メールで読み出しているサーバ(ここでは Gmail)へテストメールを送信します。送信して 5 分以内に IMAP メールサーバへ配送されていれば成功です。