sendmail -bt -C[name of sendmail.cf] |
特に、
/tryflags
に続けて、es,er,hs,hr を指定すると、各々
envelope sender, envelope recipient, header sender, header recipient
のアドレスをテストすることを指定出来ます。
主には、es,er をテストすれば良いでしょう。
また、アドレスの変換結果を知りたい場合には、上の es,er のいずれかを指定
した後で、/parse
の引数にE-mailアドレスを与えれば、どのように
展開されるかが分かります。
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) Enter <ruleset> <address> > /tryflags er > /parse kanayama@summer00.wakhok.ac.jp Cracked address = $g Parsing envelope recipient address canonify input: kanayama @ summer00 . wakhok . ac . jp Canonify2 input: kanayama < @ summer00 . wakhok . ac . jp > Canonify2 returns: kanayama < @ summer00 . wakhok . ac . jp . > canonify returns: kanayama < @ summer00 . wakhok . ac . jp . > parse input: kanayama < @ summer00 . wakhok . ac . jp . > Parse0 input: kanayama < @ summer00 . wakhok . ac . jp . > Parse0 returns: kanayama < @ summer00 . wakhok . ac . jp . > ParseLocal input: kanayama < @ summer00 . wakhok . ac . jp . > ParseLocal returns: kanayama < @ summer00 . wakhok . ac . jp . > Parse1 input: kanayama < @ summer00 . wakhok . ac . jp . > Parse1 returns: $# local $: kanayama parse returns: $# local $: kanayama 2 input: kanayama 2 returns: kanayama EnvToL input: kanayama EnvToL returns: kanayama final input: kanayama final returns: kanayama mailer local, user kanayama |
これによって、kanayama@summer00.wakhok.ac.jp 宛のメイルは、mailer が local で、local user の kanayama へ配送するように展開された事が分かります。
一般に、一語アドレス、[user]@[mydomain]、 [user]@[host].[mydomain]、[user]@[other domain] などをテストすれば良い でしょう。
特に、SMART_HOST
を使って、外へのメイルをドメイン・マスターに
送っている場合には、
/try smtp hogehoge@summer01.wakhok.ac.jp
を試して見てください。これを実行したのが、ドメイン・マスターではない メイルサーバならば、結果はドメイン・マスターへの転送になっている はずです。
sendmail -bv hogehoge |
hogehoge@test... deliverable: mailer smtp, host [192.168.xx.xx], user hogehoge@summer00.wakhok.ac.jp |
sendmail -C[sendmail.cf] -v -bv hogehoge |
~hogehoge/.forward
も表示されます。
sendmail -C[sendmail.cf] -v hogehoge |
#sendmail -Cmy.cf -v hogehoge@summer00.wakhok.ac.jp test . root@test... Connecting to [192.168.xxx.xxx] (smtp)... 220-mail1.summer00.wakhok.ac.jp Sendmail R8/cf1.0 ready at Sat, 29 Jul 2001 15:08:24 +0900 220 ESMTP spoken here >>> EHLO mail1.summer00.wakhok.ac.jp 250-mail1.summer00.wakhok.ac.jp Hello mail1.summer00.wakhok.ac.jp [192.168.xxx.xxx], pleased to meet you 250 HELP >>> MAIL From:<root@summer00.wakhok.ac.jp> SIZE=5 250 <root@summer00.wakhok.ac.jp>... Sender ok >>> RCPT To:<hogehoge@summer00.wakhok.ac.jp> 250 <hogehoge@summer00.wakhok.ac.jp>... Recipient ok >>> DATA 354 Enter mail, end with "." on a line by itself >>> . 250 PAA07638 Message accepted for delivery hogehoge@test... Sent (PAA07638 Message accepted for delivery) Closing connection to [192.168.xxx.xxx] >>> QUIT 221 summer00.wakhok.ac.jp closing connection |
sendmail のプロセス番号を調べて、それを kill します。
# ps ax | grep sendmail 237 ? 0:01 sendmail # kill 237 |
次に、新しい sendmail を立ちあげます。
# sendmail -bd -q15m |
これで、sendmail がポート番号 25 で、デーモンとして動いている筈ですから、 まず、その動作を確認します。 その際に、MUA を用いるのではなく、telnet を用いて直接 SMTP で sendmail と会話するようにします。(このようにするのには理由があります。mail のテスト では、MUA と MTA が関係して来るので、単に配送されないというだけでは問題が 分からないからです。)
# telnet localhost 25 Trying 127.0.0.1 ... Connected to localhost. Escape character is '^]'. 220-summer00.wakhok.ac.jp. Sendmail R8/cf1.0 ready at Sat, 06 Aug 2001 15:46:35 +0900 220 ESMTP spoken here |
まず、sendmail と話をするときには、最初に HELO か EHLO のどちらかを 使います。EHLO を使うと 拡張SMTP を自分が話すことが出来ることを示すことにります。ここは、HELO を使うことにします。sendmail8.7.x からは、HELO を使わないとエラーメッセージ がメイルのヘッダーに入るようになっています。また、相手ドメインのオプションも 忘れずに付けて下さい。
helo summer00.wakhok.ac.jp 250 mail1.summer00.wakhok.ac.jp. Hello localhost [127.0.0.1], pleased to meet you |
きちんと自分のホスト名、ドメイン名になっているか確認します。 次に、アドレス書き換えのチェックを行います。
expn whoami 550 whoami... User unknown expn root 250 0000-Admin(0000) <root@mail1.summer00.wakhok.ac.jp.> expn hogehoge 250 <hogehoge@mail1.summer00.wakhok.ac.jp> expn hoge2 250 <hoge2@mail1.summer00.wakhok.ac.jp> expn hoge2@pc2f011 250 <hoge2@mail1.summer00.wakhok.ac.jp> expn kana@kyoto-u.ac.jp 250 <kana@kyoto-u.ac.jp> |
それぞれローカルユーザーの1語アドレス、別のホストにスプールを持つ ユーザーの1語アドレス、ユーザー名@ホスト名、外部のフルのアドレス などをテストしてみます。 これらが全て期待通り展開されるようならば、いよいよメイルを出してみましょう。
mail from:<root@summer00.wakhok.ac.jp> 250 <root@summer00.wakhok.ac.jp>... Sender ok rcpt to:<hogehoge> 250 <hogehoge>... Recipient ok data 354 Enter mail, end with "." on a line by itself Subject: test this is a test. . 250 SAA03184 Message accepted for delivery quit 221 mail1.summer00.wakhok.ac.jp. closing connection |
mail from: が差出人のアドレス指定で、< >
でくくらなければなりません。
次に、rcpt to: が受取人のアドレス、data が本文のメッセージです。
メッセージの終わりは、ピリオッド(.)、リターンで示します。
sendmail との会話を終わらせるには、quit と入力します。
さて、これでうまくローカルの hogehoge にメイルが到着したでしょうか?
うまく行かない場合は、/etc/mail/sendmail.cf の行頭に Mlocal
を
見つけて(vi の /Mlocal
で見つけます)、その行にqPSXfmnz9P
と
なっているかどうかを見てください。S
がなければ、
FEATURE(local_lmtp)
の設定忘れです。また、次の行の A=mail.local -l
もチェックしてください。これも LMTP モードでの配送を指示するために必要で、
これがないのも同じく LMTP の設定忘れです。
これらに問題がなければ、/etc/hosts と DNS の設定に矛盾がないか(特に、
自分のホスト名、ドメイン名が正しいか)、
aliases に問題がないかを調べて
みましょう。多くの場合は、これらの設定ミスです。
ローカルでのテストに成功すれば、他のホストへの配送を 試してみましょう。着信がなければ、まずキューを調べてみましょう。
# sendmail -bp |
この時、もしエラーならば2行目以降に理由が表示されるます。また、もし、 キューに溜まっていなければ、相手先ホストでのトラブルと考えられるので、 相手先ホストのキューを調べます。また、root 宛にエラーメッセージが来ている こともあるので、root 宛のメイルについてもチェックします。
うまく着信したならば、メイルのヘッダーをチェックします。期待した通りの アドレスになっているか、配送経路に問題はないかを見ます。
自ドメイン内での配送に成功したならば、同じように他のドメインの管理者と 連絡を取り、他のドメインとの配送を調べます。この時、まず、ハブホストからの 配送を試し、次に他のマシンからの配送という具合に順に調べていきます。 当然、配送するたびに、ドメイン内でのテストと同じようにメイルのヘッダー をチェックし、経路、アドレス書き換えに問題がないかをチェックします。 うまく行かないときには、まず相手先の DNS がうまく引けているかをチェック します。DNS 自体は動作していても、MX フィールドの設定がおかしいのかも 知れません。また、自分のサイトの DNS がおかしい場合もあります。双方向で 調べて下さい。DNS でメイルを配送出来ない理由の多くは、sendmail の作成 に失敗しているか、DNS の設定がおかしい場合です(勿論、ネットワークが つながっている事を前提とします)。