sendmail.cfを直接編集することはほとんどないと思いますが、設定をあとから確認したいときなど知っておくと便利ですので、簡単な内容だけ解説します。
sendmail.cfの書式
sendmail.cfは、1行に1設定(コマンド)を指定するという書式になっています。次行にまたがる場合は、タブあるいは空白で次の行をはじめます。なお、空行と“#”で始まる行はコメントとして扱われます。
V行
sendmail.cfの先頭で定義します。
O行
上の例では、aliaswsファイルの場所を指定しています。下段では、メッセージの最大サイズを指しています。この他にも数多くの設定がされています。
C行
Cw行はメールサーバの別名を指定します。その次にあるFw行は、メールサーバの別名を外部ファイルに記述するための指定です。また、CO行ではローカルパートに使えない文字を指定しています。
D行
Dwは、メールサーバの公式なホスト名(ドメイン名は含みません)を指定します。Dmはメールサーバの公式なドメイン名を指定します。Djは、メールサーバの公式なFQDN(ドメイン名を含めたホスト名)を指定します。それぞれ、sendmail.cfの中では、$w、$m、$jで参照されます。
Dn行では、エラーメッセージのFromに設定する名前を設定しています。
F行
F行は、外部ファイルを参照してクラスマクロを定義するコマンドです。
P行
メールソフトで、「重要」「やや重要」などが選択できるものがあると思いますが、それに関する設定です。
T行
Ft/etc/mail/trusted-usersを有効に捨て場、trusted-usersファイルに記述することもできます。
H行
S行/R行
R行で実際のアドレス書き換えルールを定義します。sendmail.cfでもっとも難しいのは、このR行になります。
M行
ルールセット
sendmail.cfは、設定をルールセット単位に分けて定義します。以下にsendmailが標準で持っているルールセットを挙げました。6から99は、sendmail.cfで必要に応じて定義されます。
これらのルールセットは、処理する上で順番が存在します。まず、メールを受け取ると、ルールセット3で前処理を行い、適切なルールセットに渡します。次のルールセットはそのメールを処理してまた次へ、というように渡していき、最後にルールセット4で後処理をして、メールボックスへの配送などを行います。
このルールセットの流れを知らなくてもsendmailを設定することはできますが、より細かな設定を行うためには、ルールセットの関係を知っておく必要があります。
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/BerkeleyV行でsendmail.cfのバージョンを定義します。
sendmail.cfの先頭で定義します。
O行
# O行の定義例 # location of alias file O AliaxFile=/etc/mail/aliases # maximum messages size O MaxMessagesSize=1000000O行でsendmailのさまざまなオプションを設定します。
上の例では、aliaswsファイルの場所を指定しています。下段では、メッセージの最大サイズを指しています。この他にも数多くの設定がされています。
C行
# C行の定義例 Cwlocalhost # file containing names of hosts for which ws\e receive email Fw/etc/mail/local-host-namesC行でクラスマクロを定義します。
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-DAEMOND行でマクロを定義します。
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=-100P行で配送のPriority(優先度)を定義します。
メールソフトで、「重要」「やや重要」などが選択できるものがあると思いますが、それに関する設定です。
T行
# T行の定義例 ##################### # Trusted users # ##################### # this is equivalent to setting class "t" #Ft/etc/mail/trusted-users Troot Tdaemon Tuucp V10/BerkeleyT行では、信用できるユーザを定義します。
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 parsingS行でルールセットで定義の開始を指定します。
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 $hM行は、メール配信エージェント(MDA)を指定します。
ルールセット
sendmail.cfは、設定をルールセット単位に分けて定義します。以下にsendmailが標準で持っているルールセットを挙げました。6から99は、sendmail.cfで必要に応じて定義されます。
ルールセット | 目的 |
---|---|
0 | メール配信エージェントを決定する |
1 | 発信者のアドレスを処理する |
2 | 受信者のアドレスを処理する |
3 | すべてのアドレスの前処理を行う |
4 | すべてのアドレスの後処理を行う |
5 | エイリアスされていないローカルユーザに関する書き換えを行う |
これらのルールセットは、処理する上で順番が存在します。まず、メールを受け取ると、ルールセット3で前処理を行い、適切なルールセットに渡します。次のルールセットはそのメールを処理してまた次へ、というように渡していき、最後にルールセット4で後処理をして、メールボックスへの配送などを行います。
このルールセットの流れを知らなくてもsendmailを設定することはできますが、より細かな設定を行うためには、ルールセットの関係を知っておく必要があります。
┌─>0──>配信エージェント │ │指示する │ ∨ 入力3─┼─>2──>R=─┐ │ ├─>4 出力 └─>1──>S=─┘