うちのネットワーク環境はサーバ移設に伴って「サーバ完全支配型」から「ルータぶら下がり型」に変更になったわけですが、ルータにぶら下がっている場合は PPPoE 接続が一旦切れたことを知るすべがありません。以前は ユーザppp により接続/再接続した際に fetchmail -c していたわけですが、これができなくなりました。
それで何が困るのかというと、
接続後すぐはメールが送信できないのですよ。正確には POP before SMTPに頼っている ケータイ会社のドメイン(草の根メールサーバからだと遅延したり Reject されたりする)だけですから、「接続後すぐにケータイに送信できない」となります。接続後すぐに私がメールを送るなんてことはあまりないのですが、サーバーがメールを送ることはよくありまして、「定期的にWANのIPアドレスを調べて、変わっていれば通知する」とか「リンク先の更新状況を調べて通知する」なんてメールが消失する可能性があります。
ということで、問題は外部メールサーバにリレーするときに POP before SMTP などという美しくない方法を使っていることにあるわけですから、SMTP認証に変えてみました。
[やったこと]AuthInfo: "U:userid" "P:password" "M:DIGEST-MD5"と書く。続いて 'makemap hash authinfo < authinfo ' して authinfo.db を作成。パーミッションは下記のとおり
-r-------- 1 root wheel 52 Jan 6 15:22 authinfo
-rw-r----- 1 root smmsp 65536 Jan 6 15:22 authinfo.db
define(`SMART_HOST', `[smtp.toriyu.que.ne.jp]')等と入れて sendmail.cf を作り直す。上記の smtp.toriyu.que.ne.jp がプロバイダの SMTP サーバ。
FEATURE(`authinfo', `hash -o /etc/mail/authinfo')
うまく動いていると、送ったメールの Received行には
Received: from toriyu.dd.que.ne.jp (PPPax10.osaka-ip.dti.ne.jp [210.170.254.10])のように付くようです。
(authenticated bits=128)
by smtp1.inetd.co.jp (8.12.10/8.12.10) with ESMTP id j067DV8D064959
(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO)
for <takatani@mars.dti.ne.jp>; Thu, 6 Jan 2005 16:13:31 +0900 (JST)
(envelope-from ◎◎◎◎@toriyu.dd.que.ne.jp)
authinfo ファイルは本当は AuthInfo: のコロンの後にメールサーバを書くようなのですが、うちで試したところ smtp.toriyu.que.ne.jp と書いても [smtp.toriyu.que.ne.jp] と書いても駄目で、smtp.toriyu.que.ne.jp を正引きしたIPアドレスを書くと OK という具合でした。メールサーバのアドレスが変わると面倒ですから何も書かずにデフォルトをこれとしました。
ということで、ようやく POP before SMTP から開放されました。めでたしめでたし。
# 結果だけ書くと簡単なのですが、これだけのために2日ほどハマっていたのは誰にもいえない秘密です。