この節では、メールサービスの問題解決に使用できるヒントとツールをいくつか示します。
構成ファイルを変更したシステム上で、sendmail を再起動します。
# pkill -HUP sendmail |
/usr/lib/sendmail -v names </dev/null と入力して Return キーを押すことにより、各システムからテストメッセージを送信します。
names には、受信者の電子メールアドレスを指定します。
このコマンドは、指定された受信者に空のメッセージを送信し、動作している間メッセージを表示します。
次のテストを実行します。
メッセージを通常のユーザー名に送ることによってメールを自分自身またはローカルシステム上の他の人に送信します。
Ethernet の場合は、別のシステムの誰かにメールを送信します。
メインシステムからサブシステムへ、サブシステムからメインシステムへ、およびサブシステムから別のサブシステムへの 3 つの方向で送信します。
メールゲートウェイがある場合、メールホストから別のドメインにメールを送信してリレーメールプログラムおよびホストが適切に設定されていることを確認します。
電話回線上に別のホストへの UUCP 接続を設定している場合は、そのホストの誰かにメールを送信し、その個人にメールを返信してもらうか、またはその個人がメッセージを受信したときに電話してもらいます。
UUCP 接続を介してメールを送信するように他の人に頼みます。
sendmail プログラムでは、メッセージが受信されたかどうかは通知されません。これは、メッセージが配信のために UUCP に渡されるためです。
異なるシステムの postmaster にメッセージを送り、自分のポストマスターのメールボックスに送られることを確認します。
別名と受信者にメールを配信できるかどうかを調べるには、次のようにします。
このコマンドは別名を表示し、最終アドレスが配信可能かどうかを識別します。
次に出力例を示します。
% /usr/lib/sendmail -v -bv sandy sandy... aliased to ssmith ssmith... aliased to sandy@phoenix sandy@phoenix... deliverable: mailer esmtp, host phoenix, user sandy@phoenix.eng.acme.com % |
ローカルとドメイン全体で有効な別名を両方使用するときには、ループしたりデータベースの一貫性が失われたりしないように十分に注意する必要があります。ユーザーをあるシステムから別のシステムに移動するときは、別名のループを作成しないように特に注意してください。
/usr/lib/sendmail -bt と入力して Return キーを押します。
情報が表示されます。
最後のプロンプト (>) で、3,0 とテストしたいメールアドレスを入力します。
Control-d キーを押してセッションを終了します。
次に出力例を示します。
% /usr/lib/sendmail -bt ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) Enter <ruleset> <address> > 3,0 sandy@phoenix rewrite: ruleset 3 input: sandy @ phoenix rewrite: ruleset 96 input: sandy < @ phoenix> rewrite: ruleset 96 returns: sandy < @ phoenix . eng . acme . com . > rewrite: ruleset 3 returns: sandy < @ phoenix . eng . acme . com . > rewrite: ruleset 0 input: sandy < @ phoenix . eng . acme . com . > rewrite: ruleset 199 input: sandy < @ phoenix . eng . acme . com . > rewrite: ruleset 199 returns: sandy < @ phoenix . eng . acme . com . > rewrite: ruleset 98 input: sandy < @ phoenix . eng . acme . com . > rewrite: ruleset 98 returns: sandy < @ phoenix . eng . acme . com . > rewrite: ruleset 198 input: sandy < @ phoenix . eng . acme . com . > rewrite: ruleset 198 returns: $# local $: sandy rewrite: ruleset 0 returns: $# local $: sandy |
他のシステムへの接続を調べるには、mconnect プログラムを使用してネットワーク上のその他の sendmail システムへの接続をオープンします。mconnect プログラムは対話方式で動作します。さまざまな診断コマンドを実行できます。詳細は、mconnect(1) のマニュアルページを参照してください。次の例では、ユーザー名 shamira へのメールが配信可能かどうかを調べます。
$ mconnect phoenix connecting to host phoenix (129.144.52.96), port 25 connection open 220 phoenix.Eng.Acme.COM Sendmail 8.9.0+Sun/8.9.0; Tue, 25 Jul 1998 10:45:28 -0700 vrfy sandy 250 Sandy Smith <sandy@phoenix.Eng.Acme.COM> > |
mconnect を使用して SMTP ポートに接続できない場合は、次の条件を確認してください。
システム負荷が高すぎないか
sendmail デーモンが動作しているか
システムに適切な /etc/mail/sendmail.cf ファイルがあるか
ポート 25 (sendmail が使用するポート) がアクティブであるか
メールサービスは、syslogd プログラムを使用してほとんどのエラーを記録します。デフォルトでは、syslogd は loghost にメッセージを送ります。
/etc/hosts ファイルの loghost というシステムを、NIS ドメイン全体のすべてのログを管理するように定義できます。システムログは syslogd プログラムによってサポートされます。 /etc/hosts で loghost を指定します。loghost を指定しなければ、syslogd からのエラーメッセージはレポートされません。
例 34-1 にデフォルトの /etc/syslog.conf ファイルを示します。
#ident "@(#)syslog.conf 1.3 93/12/09 SMI" /* SunOS 5.0 */ # # Copyright (c) 1994 by Sun Microsystems, Inc. # # syslog configuration file. # # This file is processed by m4 so be careful to quote (`') names # that match m4 reserved words. Also, within ifdef's, arguments # containing commas must be quoted. # # Note: Have to exclude user from most lines so that user.alert # and user.emerg are not included, because old sendmails # have no 4.2BSD based systems doing network logging, you # can remove all the special cases for "user" logging. # *.err;kern.debug;auth.notice;user.none /dev/console *.err;kern.debug;daemon,auth.notice;mail.crit;user.none /var/adm/messages *.alert;kern.err;daemon.err;user.none operator *.alert;user.none root *.emerg;user.none * # if a non-loghost machine chooses to have authentication messages # sent to the loghost machine, un-comment out the following line: #auth.notice ifdef(`LOGHOST', /var/log/authlog, @loghost) mail.debug ifdef(`LOGHOST', /var/log/syslog, @loghost) # # non-loghost machines will use the following lines to cause "user" # log messages to be logged locally. # ifdef(`LOGHOST', , user.err /dev/console user.err /var/adm/messages user.alert `root, operator' user.emerg * ) |
/etc/syslog.conf ファイルを編集することにより、デフォルト構成を変更できます。変更内容を有効にするには、syslog デーモンを再起動する必要があります。メールに関する情報収集のため、次の選択項目をファイルに追加できます。
mail.alert - ここで訂正する必要のある状態メッセージ
mail.crit - クリティカルメッセージ
mail.warning - 警告メッセージ
mail.notice - エラーではないが注意すべきメッセージ
mail.info - 情報的なメッセージ
次のエントリにより、重要なメッセージ、単なる情報としてのメッセージ、およびデバッグメッセージのすべてのコピーが、/var/log/syslog に送られます。
mail.crit;mail.info;mail.debug /var/log/syslog |
システムログの各行には、タイムスタンプ、ログを生成したシステム名、およびメッセージが入っています。syslog ファイルは、大量の情報を記録できます。
ログは、連続したレベルとして並べられます。最下位レベルでは、異常なイベントだけが記録されます。最上位レベルでは、もっとも必須なイベントと注目する必要のないイベントが記録されます。通常、10 以下のログレベルが「有用」とみなされます。10 を超えるログレベルは通常、デバッグに使用されます。loghost と syslogd プログラムについては、『Solaris のシステム管理 (第 2 巻)』を参照してください。
その他の診断情報については、次の情報源を確認してください。
メッセージのヘッダーの Received 行を調べます。これらの行は、メッセージがリレーされるときにとった経路を追跡できます。UUCP ネットワークでは、多くのサイトがこれらの行を更新せず、またインターネットでは、行がしばしば再編成されるので注意してください。これらを適切に処理するには、各行の日時を調べてください。時間帯の違いを考慮するのを忘れないでください。
ワークステーショングループの配信上の問題を記録するシステムログを確認します。sendmail プログラムは常に、処理の内容をシステムログに記録します。crontab ファイルを修正してシェルスクリプトを夜間に実行できます。これは、ログから SYSERR メッセージのログを検索し、見つかったものをポストマスターに送信します。