メール・サーバー関連のインストール手順
#navi(OpenBlockS)

OpenBlockS に qmail とその仲間をインストールして、メール・サーバーを構築する手順

**目次
#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 &#x7c; 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(免責事項)

トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS