sendmail.cfの文法



 sendmail.cfを直接編集することはほとんどないと思いますが、設定をあとから確認したいときなど知っておくと便利ですので、簡単な内容だけ解説します。

sendmail.cfの書式

 sendmail.cfは、1行に1設定(コマンド)を指定するという書式になっています。次行にまたがる場合は、タブあるいは空白で次の行をはじめます。なお、空行と“#”で始まる行はコメントとして扱われます。
 Fw/etc/local-host-name
 上記のような行コマンドでは、“F”が行コマンド、“w/etc/local-host-name”がパラメータを示します。ここに挙げた例は一例ですが、最初の1文字とそれ以外で分ける独特の書式を取っています。行コマンドの一覧は次の通りです。

行コマンドの一覧
  V   sendmail.cfのバージョンを定義(V8.6から)
  O   起動時のオプションを定義
  C   クラスマクロを定義
  D   マクロを定義
  F   外部ファイルからクラスマクロを定義
  H   ヘッダ形式を定義
  P   配送の優先度を定義
  R   書き換えルールの内容を定義
  S   ルールセット記述を開始
  T   信用できるユーザ(トラステッドユーザ)を定義(V8.1では無視されたが、V8.7から復活)
  M   メール配信エージェント(MDA)を定義
  K   キー参照データベースを宣言(V8.1から)
  E   メール配信エージェント(MDA)を定義(V8.7から)


V行
  # V行の定義例
  V10/Berkeley
 V行でsendmail.cfのバージョンを定義します。
 sendmail.cfの先頭で定義します。

O行
  # O行の定義例
  # location of alias file
  O AliaxFile=/etc/mail/aliases
  # maximum messages size
  O MaxMessagesSize=1000000
 O行でsendmailのさまざまなオプションを設定します。
 上の例では、aliaswsファイルの場所を指定しています。下段では、メッセージの最大サイズを指しています。この他にも数多くの設定がされています。

C行
  # C行の定義例
  Cwlocalhost
  # file containing names of hosts for which ws\e receive email
  Fw/etc/mail/local-host-names
 C行でクラスマクロを定義します。
 Cw行はメールサーバの別名を指定します。その次にあるFw行は、メールサーバの別名を外部ファイルに記述するための指定です。また、CO行ではローカルパートに使えない文字を指定しています。

D行
  # D行の定義例
  # my official domain name
  # ... define this only if sendmail cannnot automatically determine your domain
  Dwmail
  Dmhoge.com
  Dj#w.$m
  # my name for error messages
  DnMAILER-DAEMON
 D行でマクロを定義します。
 Dwは、メールサーバの公式なホスト名(ドメイン名は含みません)を指定します。Dmはメールサーバの公式なドメイン名を指定します。Djは、メールサーバの公式なFQDN(ドメイン名を含めたホスト名)を指定します。それぞれ、sendmail.cfの中では、$w、$m、$jで参照されます。
 Dn行では、エラーメッセージのFromに設定する名前を設定しています。

F行

 F行は、外部ファイルを参照してクラスマクロを定義するコマンドです。

P行
  # P行の定義例
  ###########################
  #   Message precedences   #
  ###########################
  Pfirst-class=0
  Pspecial-delivery=100
  Plist=-30
  Pbulk=-60
  Pjunk=-100
 P行で配送のPriority(優先度)を定義します。
 メールソフトで、「重要」「やや重要」などが選択できるものがあると思いますが、それに関する設定です。

T行
  # T行の定義例
  #####################
  #   Trusted users   #
  #####################
  # this is equivalent to setting class "t"
  #Ft/etc/mail/trusted-users
  Troot
  Tdaemon
  Tuucp  V10/Berkeley
 T行では、信用できるユーザを定義します。
 Ft/etc/mail/trusted-usersを有効に捨て場、trusted-usersファイルに記述することもできます。

H行
  # H行の定義例
  #########################
  #   Format of headers   #
  #########################
  H?P?Return-Path: <$g>
  HReceived: $?sfrom $s $.$?_($?s$|from $.$_)
          $.$?{auth_type}(authenticated$?{auth_ssf} (${auth_ssf} bits)$.)
          $.by $j ($v/$Z)$?r with $r$. id $i$?{tls_version}
          (using ${tls_version} with cipher ${cipher} (${cipher_bits} bits) verified ${verify})$.$?u
          for $u; $|;
          $.$b
  H?D?Resent-Date: $a
  H?D?Date: $a
  H?F?Resent-From: $?x$x <$g>$|$g$.
  H?F?From: $?x$x <$g>$|$g$.
  H?x?Full-Name: $x
  # HPosted-Date: $a
  # H?l?Received-Date: $b
  H?M?Resent-Message-Id: <$t.$i@$j>
  H?M?Message-Id: <$t.$i@$j>
 H行でヘッダのフォーマットなどを定義します。

S行/R行
  # S行/R行の定義例
  ######################################
  ###   Ruleset 0 -- Parse Address   ###
  ######################################
  Sparse=0
  $*                      $: $>Parse0 $1          initial parsing
  R<@>                    $#local $: <@>          special case error msgs
  R$*                     $: $>ParseLocal $1      handle local hacks
  R$*                     $: $>Parse1 $1          final parsing
 S行でルールセットで定義の開始を指定します。
 R行で実際のアドレス書き換えルールを定義します。sendmail.cfでもっとも難しいのは、このR行になります。

M行
  # M行の定義例
  smtp,           P=[IPC], F=mDFMuX, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990,
                  T=DNS/RFC822/SMTP,
                  A=TCP $h
  Mesmtp,         P=[IPC], F=mDFMuXa, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990,
                  T=DNS/RFC822/SMTP,
                  A=TCP $h
  Msmtp8,         P=[IPC], F=mDFMuX8, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990,
                  T=DNS/RFC822/SMTP,
                  A=TCP $h
  Mdsmtp,         P=[IPC], F=mDFMuXa%, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990,
                  T=DNS/RFC822/SMTP,
                  A=TCP $h
  Mrelay,         P=[IPC], F=mDFMuXa8, S=EnvFromSMTP/HdrFromSMTP, R=MasqSMTP, E=\r\n, L=2040,
                  T=DNS/RFC822/SMTP,
                  A=TCP $h
 M行は、メール配信エージェント(MDA)を指定します。

ルールセット

 sendmail.cfは、設定をルールセット単位に分けて定義します。以下にsendmailが標準で持っているルールセットを挙げました。6から99は、sendmail.cfで必要に応じて定義されます。

ルールセット 目的
0 メール配信エージェントを決定する
1 発信者のアドレスを処理する
2 受信者のアドレスを処理する
3 すべてのアドレスの前処理を行う
4 すべてのアドレスの後処理を行う
5 エイリアスされていないローカルユーザに関する書き換えを行う


 これらのルールセットは、処理する上で順番が存在します。まず、メールを受け取ると、ルールセット3で前処理を行い、適切なルールセットに渡します。次のルールセットはそのメールを処理してまた次へ、というように渡していき、最後にルールセット4で後処理をして、メールボックスへの配送などを行います。
 このルールセットの流れを知らなくてもsendmailを設定することはできますが、より細かな設定を行うためには、ルールセットの関係を知っておく必要があります。
         ┌─>0──>配信エージェント
         │            │指示する
         │            ∨
  入力3─┼─>2──>R=─┐
         │                ├─>4 出力
         └─>1──>S=─┘