メールシステムの管理

問題解決のヒント

この節では、メールサービスの問題解決に使用できるヒントとツールをいくつか示します。

メール構成をテストする方法

  1. 構成ファイルを変更したシステム上で、sendmail を再起動します。


    # pkill -HUP sendmail
    
  2. /usr/lib/sendmail -v names </dev/null と入力して Return キーを押すことにより、各システムからテストメッセージを送信します。

    names には、受信者の電子メールアドレスを指定します。

    このコマンドは、指定された受信者に空のメッセージを送信し、動作している間メッセージを表示します。

  3. 次のテストを実行します。

    1. メッセージを通常のユーザー名に送ることによってメールを自分自身またはローカルシステム上のほかの人に送信します。

    2. Ethernet の場合は、別のシステムのだれかにメールを送信します。

      メインシステムからサブシステムへ、サブシステムからメインシステムへ、およびサブシステムから別のサブシステムへの 3 つの方向で送信します。

    3. メールゲートウェイがある場合、メールホストから別のドメインにメールを送信してリレーメールプログラムおよびホストが適切に設定されていることを確認します。

    4. 電話回線上に別のホストへの UUCP 接続を設定している場合は、そのホストのだれかにメールを送信し、その個人にメールを返信してもらうか、またはその個人がメッセージを受信したときに電話をしてもらいます。

    5. UUCP 接続を介してメールを送信するように他の人に頼みます。

      sendmail プログラムでは、メッセージが受信されたかどうかは通知されません。これは、メッセージが配信のために UUCP に渡されるためです。

    6. 異なるシステムの postmaster にメッセージを送り、自分のポストマスタのメールボックスに送られることを確認します。

別名をチェックする方法

別名と受信者にメールを配信できるかどうかを調べるには、次のようにします。

    /usr/lib/sendmail -v -bv recipient と入力して Return キーを押します。

このコマンドは別名を表示し、最終アドレスが配信可能かどうかを識別します。

次に出力例を示します。


% /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
% 

ローカルとドメイン全体で有効な別名を両方使用するときには、ループしたりデータベースの一貫性が失われたりしないように十分に注意する必要があります。ユーザーをあるシステムから別のシステムに移動するときは、別名のループを作成しないように特に注意してください。

sendmail ルールセットをテストする方法

  1. /usr/lib/sendmail -bt と入力して Return キーを押します。

    情報が表示されます。

  2. 最後のプロンプト (>) で、3,0 とテストしたいメールアドレスを入力します。

  3. 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
 

診断情報の詳細は、第 3 章「sendmail のリファレンス」を参照してください。

他のシステムへの接続を調べる方法

他のシステムへの接続を調べるには、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 ポートに接続できない場合は、次の条件をチェックしてください。

システムログ

メールサービスは、syslogd プログラムを使ってほとんどのエラーを記録します。デフォルトでは、syslogdloghost にメッセージを送ります。

/etc/hosts ファイルの loghost というシステムを、NIS ドメイン全体のすべてのログを管理するように定義できます。システムログは syslogd プログラムによってサポートされます。 /etc/hostsloghost を指定します。loghost を指定しなければ、syslogd からのエラーメッセージはレポートされません。

例 2-1 にデフォルトの /etc/syslog.conf ファイルを示します。


例 2-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 デーモンを再起動する必要があります。メールに関する情報収集のため、次の選択項目をファイルに追加できます。

次のエントリにより、重要なメッセージ、単なる情報としてのメッセージ、およびデバッグメッセージのすべてのコピーが、/var/log/syslog に送られます。


mail.crit;mail.info;mail.debug			/var/log/syslog

システムログの各行には、タイムスタンプ、それを生成したシステム名、およびメッセージが入っています。syslog ファイルは、大量の情報を記録できます。

ログは、連続したレベルとして並べられます。最下位レベルでは、異常なイベントだけが記録されます。最上位レベルでは、もっとも必須なイベントと注目する必要のないイベントが記録されます。慣例により、10 以下のログレベルが「有用」とみなされます。10 を超えるログレベルは通常、デバッグに使用されます。loghostsyslogd プログラムについては、『Solaris のシステム管理 (第 2 巻)』の「システムのメッセージ記録のカスタマイズ」を参照してください。

その他の診断情報

その他の診断情報については、次の情報源をチェックしてください。