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 の設定がおかしい場合です(勿論、ネットワークが つながっている事を前提とします)。