next up previous contents
Next: POP, IMAP4 の導入 Up: sendmail の設定 Previous: Other Setting

テスト方法

メイル環境のテストは段階を踏んで行うべきであり、いきなり sendmail, sendmail.cf をインストールしてはいけません。以下、順にテスト手順について解説していきます。
アドレス書き換えのテスト

まず最初に、sendmail.cf に設定されたアドレス書き換えが正当かどうかを確認 しましょう。

      sendmail -bt  -C[name of sendmail.cf]
オプション -C は、コンフィギュレーションファイルの指定です。指定しないと、 デフォルトに設定されます( sendmail R8 では、普通にコンパイルすると cf は /etc/mail/sendmail.cf にあると設定されます)。 また、C の後ろに空白を入れてはいけません(必要ならば、パスも含めて下さい)。 このテストモードでは、ルールセットとアドレスを指定することによって、結果を 確認することが出来ます。

特に、 /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

を試して見てください。これを実行したのが、ドメイン・マスターではない メイルサーバならば、結果はドメイン・マスターへの転送になっている はずです。

エイリアスのチェック

次に、aliases のチェックを行います。これには、ベリファイモードを使用します。 但し、この場合、/var/spool/mqueue を使用するので、root でテストすることを 忘れないようにして下さい。

      sendmail -bv hogehoge
この場合、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 を使って配送をします。しかし、このためには必ずどれか メイルを受け取れるマシンが必要です。まったく、利用可能なマシンがない場合は インストールが終わってからテストをすることにします。

       sendmail -C[sendmail.cf] -v hogehoge
この場合、hogehoge 宛に、メイルを送ります。aliases が hogehoge に対して設定 されていなければ、ローカルに落ちる筈です。また、アドレスを指定して 別のマシンに届くかどうかも確かめてみることが必要です。 この場合、相手の sendmailとの会話の様子が表示されます。

#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
ここで、最初の test と次の行のピリオッド(.) までが入力です。sendmail からの応答は、最初にステータスを示す番号が返って来ることになっています。

デーモンのテスト

さていよいよ sendmail をデーモンで立ちあげて、本格的なテストに入りましょう。 まず、もし現在、sendmail がデーモンで走っていたならば、それを kill しなければ なりません。

sendmail のプロセス番号を調べて、それを kill します。

        # ps ax | grep sendmail
        237 ?        0:01 sendmail
        # kill 237

次に、新しい sendmail を立ちあげます。


        # sendmail -bd -q15m
ここで、オプション -bd でデーモンとして sendmail を実行し、SMTP (Simple Mail Transfer Protocol) での着信 に待機するように指示しています。-q オプションの 後ろの 15m は、15分( 15 min. ) ごとにキューに溜まったメイルを処理する時間 間隔を指定しています。 通常は、-q1h (1時間)ごとに処理するようにスタートアップ・ファイルに記述 されています。

これで、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 からの返事が返ってくれば、少なくとも sendmail は動いて いる訳です。

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


next up previous contents
Next: POP, IMAP4 の導入 Up: sendmail の設定 Previous: Other Setting
Noriyo Kanayama