- 追加された行はこの色です。
- 削除された行はこの色です。
メール・サーバー関連のインストール手順
#navi(OpenBlockS)
OpenBlockS に qmail とその仲間をインストールして、メール・サーバーを構築する手順
OpenBlockS に qmail とその仲間をインストールして、メール・サーバーを構築する手順。
[[お家サーバー日記/2005-01-14]]大量の
[[Double Bounce攻撃>OpenBlockS/DoubleBounce]]を受けて、
現在 Postfix に変えてしまったため、過去の情報となってしまっている。
**目次
#contents
**関連リンク
-[[qmail djbdns by D. J. Bernstein:http://www.jp.qmail.org/]] - 配布ファイル・マニュアル
-[[メイル管理入門:http://qmail.jp/mail-abc/]] - 前野年紀氏による
-[[[@IT]連載記事 「実用qmailサーバ運用・管理術」:http://www.atmarkit.co.jp/flinux/index/indexfiles/qmailindex.html]] - 基本的な設置手順はここでかかれているとおり
**qmail Quick reference
[[/var/qmail/control:http://man.qmail.jp/jman5/qmail-control.html]] を書き換えたら、qmail-send を再起動 (sudo sh -c "svc -d /service/qmail; svc -u /service/qmail") する必要がある。locals と virtualdomains の変更だけなら -HUP を送れば良い。
|内容|コマンド|h
|キューの状態を調べる|sudo /var/qmail/bin/qmail-qstat|
|設定一覧を見る|/var/qmail/bin/qmail-showctl|
|どこかへメールを出す|echo to: someone@example.jp | /var/qmail/bin/qmail-inject|
**install
qmail と付随するツール類が改竄されていないかチェックする方法が他のパッケージに比べて少ない。[[Frequently asked questions from distributors:http://cr.yp.to/distributors.html]] に MD5 checksum が掲載されているが、これごと改竄されていたら打つ手が無いような気がする。とりあえず、私のところで動いているものの MD5 を載せておく。
-http://cr.yp.to/checkpwd/checkpassword-0.90.tar.gz
-http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
-ftp://ftp.jp.qmail.org/qmail/qmail-1.03.tar.gz
-ftp://ftp.nlc.net.au/pub/unix/mail/qmail/qmail-date-localtime.patch
-ftp://ftp.jp.qmail.org/qmail/ucspi-tcp-0.88.tar.gz
e75842e908f96571ae56c3da499ba1fc checkpassword-0.90.tar.gz
1871af2453d6e464034968a0fbcb2bfc daemontools-0.76.tar.gz
622f65f982e380dbe86e6574f3abcb7c qmail-1.03.tar.gz
d566e8bd99b33efee0194e855b8d6995 qmail-date-localtime.patch
39b619147db54687c4a583a7a94c9163 ucspi-tcp-0.88.tar.gz
***qmail
本体と、ヘッダに記録される日付・時間情報をローカルタイムに合わせるパッチを展開
$ mkdir -p ~/src/01distfiles/qmail
$ cd ~src/01distfiles/qmail
$ wget ftp://ftp.jp.qmail.org/qmail/qmail-1.03.tar.gz
$ wget ftp://ftp.nlc.net.au/pub/unix/mail/qmail/qmail-date-localtime.patch
$ cd ../..
$ mkdir qmail
$ cd qmail
$ tar xzvf ../01distfiles/qmail/qmail-1.03.tar.gz
$ cd qmail-1.03
$ patch -p1 < ../../01distfiles/qmail/qmail-date-localtime.patch
make の前に、以下をrootで実行
#!/bin/sh
mkdir /var/qmail
groupadd -g 600 nofiles
useradd -g nofiles -d /var/qmail/alias -s /sbin/nologin -u 610 alias
useradd -g nofiles -d /var/qmail -s /sbin/nologin -u 611 qmaild
useradd -g nofiles -d /var/qmail -s /sbin/nologin -u 612 qmaill
useradd -g nofiles -d /var/qmail -s /sbin/nologin -u 613 qmailp
groupadd -g 601 qmail
useradd -g qmail -d /var/qmail -s /sbin/nologin -u 614 qmailq
useradd -g qmail -d /var/qmail -s /sbin/nologin -u 615 qmailr
useradd -g qmail -d /var/qmail -s /sbin/nologin -u 616 qmails
コンパイル。DNSの準備が充分でなければ(MXレコードでサーバーが登録されているという意味で)、./config-fast を使う。make setup は、他のソース・ツリーで言えば make install に相当する。root で実行する必要がある。
# make setup
# make check
# ./config-fast mail.example.jp
コントロール・ファイルの設定
# cd /var/qmail/control
# echo example.jp >defaultdomain
# cat <<EOF >locals
localhost
localhost.example.jp
host.example.jp
example.jp
EOF
# cat <<EOF >rcpthosts
localhost
example.jp
.example.jp
EOF
# echo mail.example.jp >me
# echo example.jp >plusdomain
# echo example.jp >defaulthost
alias の設定
# cd /var/qmail/alias
# touch .qmail-postmaster .qmail-mailer-daemon .qmail-root
# chmod 644 .qmail*
sendmail の駆逐
# cd /usr/sbin
# mv sendmail sendmail.dist
# chmod 0 sendmail.dist
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
Maildir への移行
# cp /var/qmail/boot/home /var/qmail/rc
# vi /var/qmail/rc
s!/Mailbox!/Maildir/!g とする
alias のメール・ボックスを Maildir にする。
# /var/qmail/bin/maildirmake ~alias/Maildir
# chown -R alias ~alias/Maildir
新規ユーザーの追加 useradd foo -m の時、各ユーザーのホーム・ディレクトリに Maildir が作られるようにする。
# mkdir /etc/skel
# /var/qmail/bin/maildirmake /etc/skel/Maildir
tcpserver による SMTP daemon の起動
$ cd ~src/01distfiles/qmail
$ wget ftp://ftp.jp.qmail.org/qmail/ucspi-tcp-0.88.tar.gz
$ cd ../../qmail
$ tar xzvf ../01distfiles/qmail/ucspi-tcp-0.88.tar.gz
$ cd ucspi-tcp-0.88
$ su
# make setup check
# cd /etc
# cat <<EOF >tcp.smtp
192.168.0.:allow,RELAYCLIENT=""
127.:allow,RELAYCLIENT=""
EOF
# /usr/local/bin/tcprules tcp.smtp.cdb tcp.smtp.tmp <tcp.smtp
起動スクリプトの設定
【後日談: daemontools による管理に変えたのでこの作業は不要になった】
# mkdir -p /usr/local/etc/rc.d
# cd /usr/local/etc.d
# cat <<EOF >qmail
#!/bin/sh
#
# qmail: /var/qmail
PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin
[ -f /var/qmail/rc ] || exit 0
case "$1" in
start)
# Start daemons.
echo "Starting qmail."
csh -cf '/var/qmail/rc &'
tcpserver -v -u 611 -g 600 -x /etc/tcp.smtp.cdb \
0 smtp /var/qmail/bin/qmail-smtpd 2>&1 \
| /var/qmail/bin/splogger smtpd 3 &
echo
touch /var/spool/lock/qmail
;;
stop)
# Stop daemons.
echo "Shutting down qmail."
PID=`/bin/ps -aefw | grep qmail | awk '{print $2}'`
if [ ! -z "$PID" ] ; then
/bin/kill ${PID} 1> /dev/null 2>&1
fi
echo
rm -f /var/spool/lock/qmail
;;
*)
echo "Usage: S99qmail {start|stop}"
exit 1
esac
exit 0
EOF
# chmod 755 qmail
立ち上げ時に自動起動するように /etc/rc.local に以下を加える
【後日談: daemontools による管理に変えたのでこの作業は不要になった】
if [ -x /usr/local/etc/rc.d/qmail ]; then
/usr/local/etc/rc.d/qmail start
fi
メールが届くかどうか確認する。
# /usr/local/etc/rc.d/qmail start
# ps aux | grep qmail
# echo to: root | /var/qmail/bin/qmail-inject
# ls -l /var/qmail/alias/Maildir/new
# cat /var/qmail/alias/Maildir/new/*
届かないようなら、『[[メイル管理入門 実践編:http://qmail.jp/mail-abc/tandp2.html]]』を参考に調べる。
**Courier IMAP
[[Courier-IMAP server:http://www.inter7.com/courierimap/]]
POP3とIMAPでアクセスできるように、courier を入れる。APOPにはそのままでは対応できないようだが、SSL が使えるので不要だと思われる。POP before SMTP についても、外から SMTP サーバーを使うことはないので、やらない。どうしても外から SMTP したければ、ssh 経由でできる。
http://www.courier-mta.org/download.php から ~/src/01distfiles に courier-imap-1.7.1.tar.bz2 をダウンロードする。パッケージ化も同時に行う。
$ cd ~/src
$ tar xjvf 01distfiles/courier-imap-1.7.1.tar.bz2
$ cd courier-imap-1.7.1
$ ./configure --prefix=/usr/local
$ make
$ mkdir -p ~/src/02locakpkg/courier/courier-imap-1.7.1/etc/pam.d
$ make DESTDIR=~/src/02locakpkg/courier/courier-imap-1.7.1 install
$ cd ~/src/02locakpkg/courier/courier-imap-1.7.1
$ mv etc ..
$ sudo /usr/sbin/chown -R root.wheel usr
$ sudo tar czvf ../courier-imap-1.7.1.tar.gz usr
$ sudo rm -rf usr
$ cd ..
$ sudo tar xzvf courier-imap-1.7.1.tar.gz -C /
/etc/pam.conf に以下を加える。imap エントリは元から存在するので session だけ加えることになる。
#
# The PAM configuration file for the `pop3' service
#
pop3 auth required pam_unix.so
pop3 account required pam_unix.so
pop3 session required pam_unix.so
#
# The PAM configuration file for the `imap' service
#
imap auth required pam_unix.so
imap account required pam_unix.so
imap session required pam_unix.so
設定ファイルを初期化
# cd /usr/local/etc
# cp imapd.dist imapd
# cp imapd-ssl.dist imapd-ssl
# cp pop3d.dist pop3d
# cp pop3d-ssl.dist pop3d-ssl
# cp authdaemonrc.dist authdaemonrc
# cp quotawarnmsg.example quotawarnmsg
サーバー鍵を適当に作るか、認証局で作ってもらう。(ssl を動かさないなら不要)
# cd /usr/local/share
# cp ~/mail.example.jp.pem imapd.pem
# cp imapd.pem pop3d.pem
起動スクリプトを書く(ssl を動かさないならpop3d-ssl, imapd-ssl は削除する)
# cd /usr/local/etc/rc.d
# cat <<EOF >courier
#!/bin/sh
case "$1" in
start)
# Start daemons.
/usr/local/libexec/authlib/authdaemond start
/usr/local/libexec/pop3d.rc start
/usr/local/libexec/pop3d-ssl.rc start
/usr/local/libexec/imapd.rc start
/usr/local/libexec/imapd-ssl.rc start
;;
stop)
# Stop daemons.
/usr/local/libexec/pop3d.rc stop
/usr/local/libexec/pop3d-ssl.rc stop
/usr/local/libexec/imapd.rc stop
/usr/local/libexec/imapd-ssl.rc stop
/usr/local/libexec/authlib/authdaemond stop
;;
*)
echo "Usage: S99courier {start|stop}"
exit 1
esac
exit 0
EOF
# chmod 755 courier
立ち上げ時に自動起動するように /etc/rc.local に以下を加える
if [ -x /usr/local/etc/rc.d/courier ]; then
/usr/local/etc/rc.d/courier start
fi
MUA(mozilla 等がおすすめ)でアクセスしてみる
**daemontools
どうも、起動時や DNS がおかしい場合に、smtp が止まってしまうようなので、こうなったら毒を食らわば皿までよ、ってことで daemontools を入れることにした。[[@IT: daemontoolsによるロギングとプロセス監視(1-3):http://www.atmarkit.co.jp/flinux/rensai/qmail09/qmail09a.html]] のとおりでうまくいった。毒とは失礼な表現だが、セキュリティ的な意味ではなく、ディレクトリの構成とかメンテナンスのしやすさ -- これも問題は文化の違いだけだと思われるが -- とかを見て、私が感じた表現である。
$ cd ~/src/01distfiles/qmail
$ wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
$ su
# mkdir -p /package
# chmod 1755 /package
# tar -xzvpf daemontools-0.76.tar.gz -C /package
# cd /package/admin/daemontools-0.76
# ./package/install
# vi /var/qmail/rc
:s!qmail-start ./Maildir/ splogger qmail!qmail-start ./Maildir/!
:w
:q
# mkdir /var/qmail/services
# mkdir /var/qmail/services/qmail
# mkdir /var/qmail/services/qmail/log
# chmod +t /var/qmail/services/qmail
# cat <<EOF >/var/qmail/services/qmail/run
#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin
exec /var/qmail/rc
EOF
# cat <<EOF >/var/qmail/services/qmail/log/run
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail
EOF
# chmod +x /var/qmail/services/qmail/run
# chmod +x /var/qmail/services/qmail/log/run
# mkdir /var/log/qmail
# chown qmaill.nofiles /var/log/qmail
# chmod 700 /var/log/qmail
# cd /service/
# ln -s /var/qmail/services/qmail .
# mkdir /var/qmail/services/smtpd
# mkdir /var/qmail/services/smtpd/log
# chmod +t /var/qmail/services/smtpd
# cat <<EOF >/var/qmail/services/smtpd/run
#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin
tcpserver -v -u 611 -g 600 -x /etc/tcp.smtp.cdb \
0 smtp /var/qmail/bin/qmail-smtpd 2>&1
EOF
# cat <<EOF >/var/qmail/services/smtpd/log/run
#!/bin/sh
exec /usr/local/bin/setuidgid qmails /usr/local/bin/multilog t /var/log/smtpd
EOF
# chmod +x /var/qmail/services/smtpd/run
# chmod +x /var/qmail/services/smtpd/log/run
# mkdir /var/log/smtpd
# chown qmails.nofiles /var/log/smtpd
# chmod 700 /var/log/smtpd
# cd /service/
# ln -s /var/qmail/services/smtpd .
以前の起動スクリプトは動かないようにしておく。
# cd /usr/local/etc/rc.d
# mv qmail qmail.old
# chmod 644 qmail.old
***Quick Reference
smtpd とか qmail/log とか個別でサービスを止めたりしなければならない
|内容|コマンド|h
|サービスを止める|sudo svc -d /service/qmail|
|サービスを開始|sudo svc -u /service/qmail|
|ログを見る|sudo tail -50 /var/log/qmail/current | tai64nlocal|
**fetchmail
-[[Fetchmail Home Page:http://www.catb.org/~esr/fetchmail/]] - [[fetchmail(1):http://www.catb.org/~esr/fetchmail/fetchmail-man.html]] ([[JMで翻訳はまだのようだ:http://www.linux.or.jp/JM/html/fetchmail/man1/fetchmail.1.html]])
過去のいろんなところに作った POP3 アカウントのメールを自宅サーバーで一括して受けるために、fetchmail を入れてみる。
GNU gettext によって日本語のメッセージが出せるようだが、コンパイルが止まってしまうようなので、--disable-nls して使わないようにした。翻訳してくれた人には悪いが、どうせ cron で動かすのだから、エラーメッセージ等が日本語である必要はない。
WEB には、GPG の signature ファイルが存在するような記述があるのだが、落とせないようだ。checksums は落とせるので、これを gpg で検証して、本体は md5sum でチェックする。
$ cd ~/src/01distfiles
$ wget http://www.catb.org/~esr/fetchmail/fetchmail-6.2.3.tar.gz
$ wget http://www.catb.org/~esr/fetchmail/checksums
$ gpg --verify checksums
$ grep tar checksums
e131bdb6c3977fd47a3e122c43dcf19d fetchmail-6.2.3.tar.gz
$ md5sum fetchmail-6.2.3.tar.gz
e131bdb6c3977fd47a3e122c43dcf19d fetchmail-6.2.3.tar.gz
$ cd ..
$ tar xzvf 01distfiles/fetchmail-6.2.3.tar.gz
$ cd fetchmail-6.2.3
$ ./configure --disable-nls
$ make
$ mkdir ~/src/02localpkg/fetchmail
$ make DESTDIR=~/src/02localpkg/fetchmail install
$ cd ../02localpkg/fetchmail
$ tar czvf fetchmail-6.2.3-ssdlinux-1.tgz --owner=root --group=wheel usr
$ rm -rf usr
$ sudo tar xzvf fetchmail-6.2.3-ssdlinux-1.tgz -C /
fetchmailconf を動かすには、python が必要だ。とりあえず、手で設定ファイルを書くことにする。smtpname を書かないと、現在のユーザー名@localhost というアドレスに転送されるようだ。/var/qmail/locals に localhost の記述がない場合、外に出て行ってしまうので注意。設定の記述方法に関しては、[[Red Hat Linux レファレンス・ガイド:http://www.jp.redhat.com/manual/Doc72/RH-DOCS/rhl-rg-ja-7.2/s1-email-fetchmail.html]]が参考になる。
$ cat .fetchmailrc
set no bouncemail
defaults
protocol pop3
uidl
no rewrite
no keep
no mimedecode
smtpname "otsuka@example.jp"
skip pop3.provider1.example.jp
user "otsuka"
pass "secret1"
smtpname "otsuka-provider1@example.jp"
poll pop3.provider2.example.jp
user "abcd001"
pass "secret2"
smtpname "otsuka-provider2@example.jp"
smtpname で転送先を変えて、前振り分けでプロバイダごとに IMAP フォルダに直接配信している。再配送には、smtp (tcp/25) を使うようだ。この場合問題点として、localhost で qmail での配送に失敗した場合、差出人に返されてしまう。smtp の入り口でエラーになると fetchmail が set no bouncemail 設定に従って postmaster にエラーを報告するようにできるようだが、qmail の場合は、受け取った後でエラーになり、qmail 自身がエラー報告してしまうので、まずいことになる。(通常 pop3 から先は、配送経路とは関係ない場所なので、ここからエラーメールを返されても送信者は困惑するだろう)。
cron で fetchmail を定期的に起動する。ログは溜まってくるのがいやなので syslog に
渡すことにする。${HOME}/.fetchmailrc に set syslog を書いておけばいいようだ。
syslogにセットしていても、fetchmail 実行時に ... のような出力がある。
cronで実行するときは、これがメールで飛んでくるのでうっとうしい。
fetchmail に -s オプションを付けて起動すると、syslog まで silent になってしまって、ログが全く無くなってしまう。融通の利かないやつだ。
fetchmailには、自分で daemon として動く機能があるから、コマンドラインで呼び出すのは人間が手でやっているに違いない、とでも思って設計しているのだろうか。
とりあえず、不要な出力は適当なファイルにリダイレクトすることにする。
何か不具合があった場合だけエラーを表示してくれたら、cron のメールを捕まえて
対処できるのに。
SHELL=/bin/sh
5 7 * * * /usr/local/bin/fetchmail > $HOME/lib/fetchmail.out 2>&1
**maildrop
http://www.courier-mta.org/download.php から ~/src/01distfiles に maildrop-1.5.3.tar.bz2 をダウンロードする。パッケージ化も同時に行う。
$ cd ~/src
$ tar xjvf 01distfiles/maildrop-1.5.3.tar.bz2
$ cd maildrop-1.5.3
$ ./configure
$ make
$ mkdir ~/src/02localpkg/maildrop
$ make DESTDIR=~/src/02localpkg/maildrop install
$ cd ~/src/02localpkg/maildrop
courier-IMAP とファイルが重なっているようだ。
$ cd ~/src/02localpkg/maildrop
$ find usr -type f -print | (cd /; xargs file) | grep -v "can't stat"
usr/local/man/man1/maildirmake.1: troff or preprocessor input text
usr/local/man/man8/deliverquota.8: troff or preprocessor input text
usr/local/bin/maildirmake: ELF 32-bit MSB executable, PowerPC or cisco
4500, version 1 (SYSV), for GNU/Linux 2.0.0, dynamically linked (uses
shared libs), not stripped
courier-IMAP のファイルを使うことにして、こちらのパッケージからは削除する。
$ cd ~/src/02localpkg/maildrop
$ rm usr/local/man/man1/maildirmake.1
$ rm usr/local/man/man8/deliverquota.8
$ rm usr/local/bin/maildirmake
$ tar czvf maildrop-1.5.3-ssdlinux-1.tgz --owner=root --group=wheel usr
動作テスト
$ cat ~/.mailfilter
to "Maildir"
$ chmod 600 ~/.mailfilter
$ cat dummy-mail
To: otsuka
From: root
Subject: test mail
this is test
$ maildrop <dummy-mail
maildrop: Delivery complete.
maildrop: signal 0x06
なぜか、signal 0x06 が出て異常終了となる。signal を受ける部分は、ソース maildrop/maildrop.C にあるのだか、どうも 0 から NSIG(=64) の全てにトラップをかけているようだ。signal 6 は、/usr/include/bits/signum.h にあるように SIGIOT なのだが、この signal はすでに使われていないような気がする[[[Linux GCC HOWTO:http://www.linux.or.jp/JF/JFdocs/archive/GCC-HOWTO.html]]]。~/.mailfilter を消せば正常終了するようだが、フィルタが書けなければ意味が無い。ちなみに ~/.mailfilter は、他人が読めるような属性になっているばあいは、読み込まれないので注意。
fetchmail の rc-file を以下のようにしてテスト
$ cat test-fm
set no bouncemail
defaults
protocol pop3
uidl
no rewrite
no keep
no mimedecode
mda "maildrop .mailfilter"
poll pop3.provider1.example.jp
user "otsuka"
$ fetchmail -v -f test-fm
**日々の運用
***前振り分け
+otsuka-123@example.jp というようなアドレスをホームページなどに書いておく
+MUA で IMAP フォルダ Junk を作る
+$HOME/.qmail-default に /home/otsuka/Maildir/.Junk/ と書いておけば、otsuka-xxx@example.jp のような宛先のメールは、全て Junk フォルダ直行となる。biff も吠えない。
+メーリングリストへは、otsuka-ml@example.jp のようなアドレスで参加して、$HOME/.qmail-ml で特定の IMAP フォルダに振り分ければよい。
***ログイン名とメールアドレスの使い分け
ログイン名をメールアドレスにしたくない場合は、対応表を作って対処できる。
$ sudo sh -c "/var/qmail/bin/qmail-pw2u </etc/passwd >/var/qmail/users/assign"
$ sudo vi /var/qmail/users/assign
ログイン名 otsuka で、メールアドレスを foo@example.jp とし、foo-xxx@example.jp でも受け取りたい場合は、
+:alias:610:600:/var/qmail/alias:-::
=alias:alias:610:600:/var/qmail/alias:::
+alias-:alias:610:600:/var/qmail/alias:-::
=otsuka:otsuka:32769:100:/home/otsuka:::
=foo:otsuka:32769:100:/home/otsuka:::
+foo-:otsuka:32769:100:/home/otsuka:-::
.
とすれば良いだろう。最終行のピリオドを忘れないように。/var/qmail/users/assign を更新したら、qmail-newu で変更を反映しておく。
$ sudo /var/qmail/bin/qmail-newu
拡張アドレス (foo-xxx@example.jp のようなアドレス) で受け取りたいときは、さらに $HOME/.qmail-default もしくは、$HOME/.qmail-xxx を書いておかないと、配送エラーで差出人に戻される。
$ cat <<EOF >~/.qmail-default
/home/otsuka/Maildir/
EOF
***携帯電話に出せない場合
ADSLのアクセス・ポイントのアドレスでメール・サーバーを運用する場合、相手先のポリシーによっては断られることがある。その場合、プロバイダの smtp サーバーへ渡してしまえば良い。プロバイダの送信用のメール・サーバーが smtp.example.jp の場合、
$ sudo sh -c "echo :smtp.example.jp >/var/qmail/control/smtproutes"
但し、プロバイダのメール・サーバーがメールの中継を許可している必要がある。幸い私のプロバイダは、アクセス・ポイントからの送信に限っては、中継してくれるようなので問題無かったが、POP3 でアクセスしてからでないとメールを出せないプロバイダの場合は、何らかの対策をする必要がある。
***コンソール通知
UNIXでは、login 時と shell のコマンド・プロンプトが出るタイミングでメールボックスをチェックしてくれて、"You have New Mail" とか出してくれる機能がある。これが、Maildir にすることによって機能しなくなっている。POP3 とか IMAP4 でアクセスできるのだから不要だといえば不要なのだが、設定できるのならしておきたい。
l/etc/login.defs にある QMAIL_DIR 環境変数をセットすれば、環境変数 MAILDIR=/home/otsuka/Maildir とセットしてくれるようになるが効能は不明。しかも、ssh を使ったログインだとセットされない。
bash が Maildir に対応しているのかどうか不明だが、どうもだめなようだ。mailbox 形式の場合は、環境変数 MAIL と MAILPATH にセットすればいいのだが、Maildir 形式の場合は設定できないようだ。
***でたらめの差し戻し先
最近のルータで、何か異常が起きたら特定のメールアドレスへメールを送ってくれるものがある。そのメールを受け取って、さらに携帯電話へも転送しようとしたら、問題が発生した。
まず最初、メールを出す機器が、差し戻し先 (Return-Path:) に、でたらめなアドレス (root@mailto.localhost など) を入れる。これは、メールは出せるが受け取ることが出来ないルータ等の機器の場合、しかたのないことかもしれない。転送先の携帯電話のメール・サーバーは、このでたらめな差し戻し先が気に食わないので、受け取りを拒否した。しかたが無いので、このような経緯を追加して差し戻しを行おうとしたら戻せない。最後に MAILER-DAEMON へ差し戻しとなってしまった。
あんまり良い対応とはいえないが、/var/qmail/control/locals に機器が設定してきたでたらめのドメイン名 mailto.localhost を加えて、外に出ないようにした。本来、メールが出せる機器で、差し戻し先も設定できるようにすべきだと思う。
加えて、携帯電話への転送は、dot-qmail でシェル・スクリプトを起動し、ここでメールを作り直してから qmail-inject へ投げなおしている。これなら、差し戻し先はこのサーバーなので問題ない。
**解決済みの問題点
+shell からユーザー名だけでメールを出したとき、省略した From や、To にホスト名(/var/qmail/control/me の内容)が出てきてしまう。sudo sh -c "echo example.jp >/var/qmail/control/defaulthost" とする。
+tcpserver で起動した smtp や pop3d が止まっていることがある。再起動を行った場合は smtp が必ず止まってしまうようだ。ログを見ても理由が書いてない。daemontools を使えば、止まったときには再起動してくれるようだ。qmail 教は寡黙なのを美としているようだ(勝手な思い込みかもしれない)が、これでは対策のしようが無い。起動スクリプト (/usr/local/etc/rc.d/qmail) で一旦止めてから動かすと、止まることは無いようだ。停電などの場合に自動復帰しないのは非常に困る。
+pop3 と smtp を ssl 化しようとしているが、stone や stunnel が動かない。
#include(免責事項)