メールシステムの管理

特殊マクロ、条件文

特殊マクロはコンストラクト $x を使って参照されます。x は一致 (LHS) または挿入 (RHS) されるマクロの名前です。小文字の英字は、特定のセマンティクスに使用され、特殊文字には、条件文に使用されるものもあります。

sendmail に情報を送信するには、表 3-9 に示すマクロを定義する必要があります。

表 3-9 必要とされる sendmail マクロ

マクロ 

説明 

$a

ARPANET フォーマットでの開始日付 

$b

ARPANET フォーマットでの現在の日付 

$c

ホップカウント 

$d

UNIX (ctime()) フォーマットでの日付

$e

SMTP が起動したとき印刷される 

$f

発信者 (from) 名 

$g

受信者へ送信する発信者名 

$h

受信者ホスト 

$i

待ち行列 ID 

$j

このサイトの公式ドメイン名。$e マクロの最初の単語であり、$j はドメイン名のフォーマットである必要がある

$k

UUCP ノード名 (uname から) 

$l

UNIX の From 行のフォーマット

$m

gethostname 戻り値のドメイン部分

$n

デーモン名 (エラーメッセージ用) 

$o

トークンとみなされる文字のリスト 

$p

sendmail のプロセス ID

$q

発信者アドレスのデフォルトフォーマット。メッセージの作成時にメッセージ上の発信者の表現方法を指定する 

$r

使用するプロトコル 

$s

発信者のホスト名 

$t

現在の時間の数値表 

$u

受信者ユーザー 

$v

sendmail のバージョン数

$w

このサイトのホスト名 

$x

発信者のフルネーム 

$z

受信者のホームディレクトリ 

$-

発信者アドレス 


注 -

SunOS 4.x リリースでは、$w は、ホストの完全指定名です。Solaris 2.6 リリースでは、$w は、ホストの短縮名です。


以下に例を示します。

De$j Sendmail $v ready at $b
DnMAILER-DAEMON
DlFrom $g $d
Do.:%@!^=/ Dq$g$?x ($x)$.
Dj$H.$D

特殊な状況でないかぎり、これらのマクロのいずれも変更する必要はありません。たとえば、バナーを定義する最初の行をセキュリティの目的で変更することあります。最後の 2 行を変更して複数のホストを 1 つのホストのようにすることもあります。

$q マクロを変更して次のように指定できます。


$?x$x $.<$g>

これらは、次の 2 つのフォーマットに対応します。


doe@acme.com (John Doe) 
John Doe <doe@acme.com>

マクロによっては、メールプログラムの引数または他のコンテクストに使用する sendmail によって定義されるものもあります。これらのマクロを表 3-10 に示します。

表 3-10 別の sendmail マクロ定義

マクロ 

説明 

$m

ドメイン名 

$p

sendmail プロセス ID

3 種類の日付を使用できます。$a$b マクロは ARPANET フォーマットです。$a は (もしあれば) メッセージの Date: 行から抽出される時刻で、$b は (ポストマークに使用される) 現在の日付と時刻です。Date: 行が着信メッセージで見つからなければ、$a には現在の時間が設定されます。$d マクロは UNIX (ctime) フォーマットの $a マクロと等価です。

$f マクロは、最初に判別された発信者の ID です。「特定のホスト」にメールされたメッセージに対しては、$g マクロは「受信者に対応する」発信者名に設定されます。たとえば、発信者 eric がマシン ucbarpa から bollard@matisse にメッセージを送信する場合、$f の値は eric$g の値は eric@ucbarpa になります。

$x マクロは発信者のフルネームに設定されますが、これはいくつかの方法で知ることができます。発信者のフルネームは (ヘッダーの Full-name: 行の値から、または From: 行のコメントフィールドを使用して) フラグとして sendmail に渡すことができます。このフルネームが Full-name: 行からも、From: 行からもわからず、さらに、メッセージの発信源がローカルである場合は、フルネームは /etc/passwd ファイルで検索されます。このフルネームは name 環境変数からも読めます。

メッセージを送信する際、$h$u、および $z マクロには、受信者のホスト、ユーザー、およびホームディレクトリ (ローカルの場合) が設定されます。最初の 2 つのマクロは、書き直しルールの $@$: の部分からそれぞれ設定されます。

$p$t マクロを使用して (たとえば 、Message-Id: フィールドに) 一意の文字列を作成します。$i マクロにはこのホストの待ち行列 ID が設定され、タイムスタンプ行に入れられるとメッセージを追跡するのに便利です。$v マクロは sendmail のバージョン番号になるように設定され、通常タイムスタンプ行に入れられるのでデバッグに非常に便利です。ただし、現在のバージョンに一般的に知られるバグがあった場合、この情報を悪用される可能性があるというセキュリティ上の危険があります。$w マクロには、gethostbyname() および gethostname() によって与えられる、このホストの一次名が設定されます。$c フィールドは「ホップカウント」に設定され、つまり、このメッセージが処理された回数であり、メッセージのタイムスタンプをカウントすることによって決定されます。

$r$s フィールドには、sendmail で通信に使用されるプロトコル、および送信するホスト名に対して設定されます。

次の構文を使って条件文を指定できます。


$?x text1 $| text2 $ 

マクロ $x が設定されている場合は text1 を、それ以外の場合は text2 を挿入します。else (c $|) 節は省略できます。