SENDMAIL(8)

名称
sendmail - 電子メール配送デーモン

書式
sendmail [flags] [address ...]
newaliases
mailq [-v]
hoststat
purgestat
smtpd

解説
sendmail はメッセージを一人または複数の受け手 (recipient) に送ります。必要ならばインターネットワークを 通してメッセージを正しい場所に転送します。

sendmail はユーザインタフェースとして使われることは考慮されていません。 ユーザにとって使いやすいフロントエンドは別のプログラムで 提供されます。 sendmail は、あらかじめメールとして整形されたメッセージ を配送するためだけに使われます。

引数を指定せずに起動すると、 sendmail は標準入力をファイルの終端まで、または `.'だけを含む行まで読み込み、 そこで確認したメッセージのコピーを、 列挙されたアドレスに送ります。アドレスの文法や内容にもとづいて 経路に使用するネットワークを決定します。

ローカルアドレスは、あるファイルの中を検索して適当なエイリアスを行います。 先頭にバックスラッシュ `\' のついたアドレスについては、エイリアスは 行なわれません。 8.10 から、送り手はエイリアス展開の対象に含まれるようになりました。 つまり、`john' が `group' にメールを送る 際に、 `john' が `group' に含まれているならば、 送ったメッセージは `john' にも送られます。

  パラメータ

-Ac 動作モードが最初のメール送信依頼であることを示していない場合でも、 submit.cf を使用します。

-Am 動作モードが最初のメール送信依頼であることを示している場合でも、 sendmail.cf を使用します。

-Btype
    ボディのタイプを type に設定します。現在有効なのは、 7BIT か 8BITMIME です。

-ba ARPANET モードに移行します。すべての入力行は CR-LF で終わらなければならず、 すべてのメッセージの末尾には CR-LF がつきます。また、``From:'' と ``Sender:'' フィールドは送り手の名前としてチェックされます。

-bd デーモンモードで実行します。Berkley IPC が必要です。 sendmail は fork を行い、バックグラウンドで動作し、ソケット番号 25 で SMTP コネクションを 待ちます。通常このモードは、 /etc/rc から実行されています。

-bD フォアグラウンドで動作する以外は -bd と同じです。

-bh 継続的なホスト状況データベースの現在の値を表示します。

-bH 継続的なホスト状況データベースから 期限切れのエントリを抹消します。

-bi エイリアスデータベースを初期化します。

-bm 普通にメールを配送します(デフォルト)。

-bp メールキューのリストを表示します。

-bP キューの中のエントリ数を表示します。 共有メモリサポート付きの場合のみ、使用可能です。

-bs 標準入出力で RFC821 にもとづいた SMTP プロトコルを使います。この フラグは、 -ba フラグのうち SMTP 互換の全ての操作を含みます。

-bt アドレスのテストモードで起動します。このモードは対話 モードでアドレスを入力し、処理の過程を表示します。設定ファイル をデバッグするのに使います。

-bv 名前のチェックだけを行います。メッセージの収集や配送は行い ません。ベリファイモードは、ユーザやメーリングリストが有効かどうかを確認する ために使います。

-Cfile
    別の設定ファイルを使います。 sendmail は、別の設定ファイル を使用する場合は root として実行することはできません。

-dX デバッグ値を X に設定します。

-Ffullname
    送り手のフルネームを設定します。

-fname
    ``from'' に入る名前(つまり、エンベロープ中の送り手 (envelope sender) の名前です)を設定します。 最初の送信依頼の間に From: ヘッダが失われている場合、 このアドレスは From: ヘッダの中でも用いられる場合があります。 エンベロープ中の送り手アドレスは、 メッセージ伝送状態の通知の受け手として 用いられ、また、Return-Path: ヘッダにも現れます。 -f は、``trusted'' なユーザ(普通は root, daemon, network です)が使うか、 送り手が自分自身の名前を指定して使う場合のみ指定することができます。 それ以外の場合、X-Authentication-Warning ヘッダがメッセージに 付加されます。

-G  メッセージのリレー (ゲートウェイ) 送信。 例えば、 rmail が sendmail を呼ぶときがそうです。

-hN ホップカウントを N に設定します。ホップカウントは、 メールが処理されるたびに増えていきます。ホップカウントが上限に達した とき、メールは「エイリアスがループしている」という旨のエラーメッセージと いっしょに送り返されます。 もしこのフラグが指定されなければ、メッセージの なかの ``Received:'' 行がカウントされます。

-i  入力されるメッセージ中の `.' だけを含む行を無視します。 このフラグは、データをファイルから読み込むような場合に使用する必要があります。

-L tag
    syslog メッセージ中で使われる識別子を、指定した tag に設定します。

-N dsn
    配送状況の通知条件を dsn に設定します。 dsn には、 `never' (何も通知しない)または、コンマで区切った、 `failure' (配送が失敗した場合に通知する) `delay' (配送が遅れた場合に通知する) `success' (配送が正常に行われた場合に通知する) の組み合わせを指定する事ができます。

-n  エイリアスを行いません。

-O option=value
    オプション option を、指定した value に設定します。この形式では長いオプション名が使用されます。 詳しくは後に記述します。

-ox value
    オプション x を、指定した value に設定します。 この形式では、一文字のオプション名しか使用できません。 短いオプション名についてはこのマニュアルには記述されていません。 詳しくは、 Sendmail Installation and Operation Guide を参照して下さい。

-pprotocol
    メッセージを受け取るために利用するプロトコル名を設定します。 設定できるのは、``UUCP'' のようなプロトコル名だけか プロトコル+ホスト名、たとえば ``UUCP:ucbvax'' などです。

-q[time]
    キューのなかにあるメッセージを指定した時間間隔で処理します。 time を省略した場合は、キューの内容を一度だけしか処理しません。 time は、 秒を表す `s'、 分を表す `m' (デフォルト)、 時間を表す `h'、 日を表す `d'、 週を表す `w' の単位を付けた数字で指定します。 たとえば、 `-q1h30m' や `-q90m' は、タイムアウトを 1 時間 30 分に設定します。 デフォルトでは、 sendmail はデーモンとしてバックグラウンドで 実行されます。 このオプションは、問題なく -bd と共に指定可能です。

-qp[time]
    -qtime と似ていますが、sendmail は、 キューを処理する子プロセスを定期的に fork するのではなく、 キューの処理とスリープを交互に行う 1 個の永続的な子プロセスを fork します。 スリープ時間は引数で指定します。 デフォルトは 1 秒です。 直前のキュー実行においてキューが空だった場合、 プロセスは常に最低 5 秒はスリープします。

-qf キューに保存されているメッセージを 1 度だけ処理します。 この際、fork() せずに、フォアグラウンドで実行します。

-qG name
    name という名前のキューグループ中のジョブのみ処理します。

-q[!]I substr
    キュー ID の文字列に substr が含まれるジョブのみを処理します。 ! が指定されると、その逆となります。

-q[!]R substr
    受け手のリストの文字列に substr が含まれるジョブのみを処理します。 ! が指定されると、その逆となります。

-q[!]S substr
    送り手の文字列に substr が含まれるジョブのみを処理します。 ! が指定されると、その逆となります。

-R return
    メッセージがバウンスした時に返送されるメッセージの量を設定します。 return パラメータには、メッセージ全体を返送する場合は `full' を、ヘッダのみを返送する場合は `hdrs' を指定します。

-rname
    -f フラグと同じですが、古い形式です。

-t  受け手をメッセージから読み取ります。To:, Cc:, Bcc: フィールドが受け手 のアドレスとして読み込まれます。Bcc: フィールドはメッセージの転送前に 削除されます。

-V envid
    オリジナルのエンベロープ ID を設定します。 これは、DSN をサポートするサーバ間では SMTP 上を伝達し、 DSN に従ったエラーメッセージの中で返送されます。

-v  詳細モードに移行します。 エイリアスの展開などが報告されます。

-X logfile
    指定された logfile に、メーラに出入りする情報すべてを記録します。 メーラをデバッグする際の 最後の手段としてのみ使ってください。非常に大量の情報があっという間に記録 されます。

--  コマンドフラグ処理を停止し、残りの引数をアドレスとして使用します。

  オプション
sendmail には、設定することができる多くの処理オプションがあります。 通常、これらのオプションはシステム管理者のみが使います。 オプションは、コマンドラインから -o フラグを使って(短いオプション名で)指定したり、 -O フラグを使って(長いオプション名で)指定したり、 設定ファイルから指定することができます。ここに記述して いるのは部分的なもので、コマンド行から指定する場合に便利な物だけを、 長いオプション名で示しています。完全なリスト(と詳細)は、 Sendmail Installation and Operation Guide を参照してください。 オプションには以下の物があります。

AliasFile=file
    別のエイリアスファイルを使います。

HoldExpensive
    接続するのに時間がかかるホストと接続するときは、 すぐに接続せず、リクエストはキューに入れられます。

CheckpointInterval=N
    sendmail が、 N 個の配送に成功するたびにキューファイルに チェックポイントを設定します(デフォルトは 10 個です)。これによって、 システムのクラッシュによって長いメーリングリストの配送が中断 されたときでも、再開時に同じ人に重複して配送されることを防ぎます。

DeliveryMode=x
    配送モードを x に設定します。配送モードには `i' 対話的(同期的)配送モード、 `b' バックグラウンド(非同期的)配送モード、 `q' キューモード(実際の配送は、キューが実行されるときに行われる)、 `d' 延期モード( -D オプションで指定された マップ (デフォルトはホストマップ) に対し データベースの検索が行われない以外は `q' と同じ)があります。

ErrorMode=x
    エラー処理をモード x に設定します。有効なモードとして、 `m' はエラーメッセージを送り返します。 `w' はエラーメッセージを送り手の端末に書き出します (送り手がログインしていなければ、メールを返します)。 `p' は、エラーメッセージを端末に表示します(デフォルト)。 `q' は、エラーメッセージを捨てます(exit コードだけを返します)。 `e' は、BerkNet 用に特別処理をします。 もし、モード `m' や `w' を使っている場合に、エラーとなったメッセージが エラーメールとして送り返されず、送り手が sendmail を実行している マシン上のユーザならば、 メッセージのコピーは送り手のホームディレクトリにある dead.letter に追加されます。

SaveFromLine
    メッセージのはじめに UNIX-style の From 行を残します。

MaxHopCount=N
    メールがループしていると判断されない、最大のホップ数を 指定します。

IgnoreDots
    `.' だけを含む行をメッセージの終わりとして解釈しません。

SendMimeErrors
    エラーメッセージをMIMEフォーマットで送り返します。 設定されていない場合は、DSN (Delivery Status Notification: 配送状況通知) SMTP 拡張は無効になります。

ConnectionCacheTimeout=timeout
    コネクションキャッシュの タイムアウトを設定します。

ConnectionCacheSize=N
    コネクションキャッシュのサイズを 設定します。

LogLevel=n
    ログレベルを設定します。

MeToo=False
    エイリアスに自分自身が含まれていても、``me''(送り手自身)には送りません。

CheckAliases
    newaliases(1) コマンドの実行の際、 エイリアスの右辺(エイリアスの値)の有効性をチェックします。

OldStyleHeaders
    このオプションが設定されていれば、メッセージが古いスタイルのヘッダ を持つことがあることを意味します。 このオプションが設定されていなければ、このメッセージが新しい スタイルを持っていることが保証されます(2 つのアドレスの間は スペースのかわり にコンマで区切られます)。このオプションが設定されていると、 ヘッダのフォーマットをたいていの場合に 正しく決定する適応アルゴリズムが用いられます。

QueueDirectory=queuedir
    キューメッセージを保存するディレクトリを選択します。

StatusFile=file
    指定した名前のファイルに統計情報をセーブします。

Timeout.queuereturn=time
    キューのなかの配送されなかったメッセージのタイムアウト時間を設定します。 この時間内に(ホストのダウンなどにより)配送が行われなかったときには、 失敗した旨のメッセージが送り返されます。デフォルトは 5 日です。

UserDatabaseSpec=userdatabase
    セットした場合、ユーザデータベースを見て、 フォワード情報を得ます。 この方法をエイリアス機構の補助として使用する事ができます。 この方法は、データベースが分配されることを意図している点が異なります。 一方、エイリアスは、そのホストローカルでのみ有効です。 sendmail が USERDB 付きでコンパイルされていなければ使うことはできません。

ForkEachJob
    キューを処理する間、各ジョブごとに fork を行います。メモリが少ないマシン では便利です。

SevenBitInput
    到着するメッセージを 7 ビットにします (8 ビット目は落します)。

EightBitMode=mode
    8 ビットの入力を 7 ビットの宛先へ送る場合の処理方法を mode に設定します。 処理方法には、 m (mime 化) 7 ビット MIME 形式へ変換、 p (パス) 8 ビットのまま配送(プロトコルには違反します)、 s (厳密) メッセージをバウンス、 があります。

MinQueueAge=timeout
    配送の試行の間、ジョブがキューに蓄積される時間を設定します。

DefaultCharSet=charset
    文字集合が特に指定されていない 8 ビットデータにラベル付けする際に 用いる、デフォルトの文字集合を設定します。

DialDelay=sleeptime
    コネクションの確立が失敗した場合に、再試行までに sleeptime だけスリープします。オンデマンドでダイヤル接続するサイトでの 使用に便利です。

NoRecipientAction=action
    受け手ヘッダ (To:, Cc:, Bcc:) がない場合の動作を action に設定します。 none メッセージを変更しない、 add-to エンベロープで指定された受け手を入れた To: ヘッダを加える、 add-apparrently-to エンベロープで指定された受け手を入れた Apparrently-To: ヘッダを加える、 add-bcc 空の Bcc: ヘッダを加える、 add-to-undisclosed `To: undisclosed-recipients:;' というヘッダを加える、という動作を指定できます。

MaxDaemonChildren=N
    待ち受け SMTP デーモンが同時に生成する子プロセスの最大数を N に設定します。

ConnectionRateThrottle=N
    SMTP ポートへの 1 秒当りの最大コネクション数を N に設定します。

エイリアスのなかで最初の文字が `|' で始まるものは、メールの内容を パイプでコマンドに送るものと解釈されます。 sendmail に引数の間から空白文字を削除させないようにする場合は 名前をクォートする (" でくくる)必要があります。 以下に、例を示します:

    msgs: "|/usr/bin/msgs -s"

エイリアスには、 ``:include:filename'' という文法もあります。 sendmail は、 メールの受け手のリストを得るために、指定されたファイルを読みます。 以下に、例を示します:

    poets: ":include:/usr/local/lib/poets.list"

上記の例の場合は、 /usr/local/lib/poets.list を読み、`poets' のグループの ためのアドレスリストを作ります。

sendmail は、以下に示すような終了コードを返します。これらの コードは、 <sysexits.h> に定義されています。

EX_OK
    すべてのアドレスについて完全に成功しました。

EX_NOUSER
    ユーザ名が認識できません。

EX_UNAVAILABLE
    処理に必要なリソースを得ることができません。

EX_SYNTAX
    アドレスに文法的な間違いがあります。

EX_SOFTWARE
    引数が間違っているなどの、内部的なエラーです。

EX_OSERR
    ``cannot fork''' のような、一時的な OS エラーです。

EX_NOHOST
    ホスト名が認識できません。

EX_TEMPFAIL
    メッセージはすぐには送られませんでしたが、 キューには入れられました。

newaliases というコマンドで実行されると、 sendmail はエイリアスデータベースを再構築します。 mailq というコマンドで実行されると、 sendmail はメールキューの内容を表示します。 hoststat というコマンドで実行されると、 sendmail は、継続的なホスト状態データベースの内容を表示します。 purgestat というコマンドで実行されると、 sendmail は、継続的なホスト状態データベースから期限切れのエントリを抹消します。 smtpd というコマンドで実行されると、 -bd オプションを指定されたの同じように、 sendmail はデーモンとして動作します。

注
sendmail は、多くの問題の原因だと責められることがよくありますが、 実際のところ、それらの問題は、 ディレクトリのモードが過剰に許可された状態であるなど、 他の問題に起因するものです。このため、 sendmail は、システムディレクトリとファイルのモードをチェックし、 それらディレクトリ、ファイルが信頼するに足るものかどうかを 決定します。 DontBlameSendmail オプションを設定することにより、 このチェックをオフにし、システムのセキュリティを低下することも できますが、基本的には、パーミッションの問題は修正されねばなりません。 詳細な情報は、 http://www.sendmail.org/tips/DontBlameSendmail.html を参照して下さい。

関連ファイル
/etc/mail/sendmail.cf それ自身を除き、以下のファイルのパスはすべて /etc/mail/sendmail.cf の内部で指定されています。以下の値は概略に過ぎません。

/etc/mail/aliases
    エイリアス名の生データ

/etc/mail/aliases.db
    エイリアス名のデータベース

/etc/mail/sendmail.cf
    設定ファイル

/etc/mail/helpfile
    ヘルプファイル

/etc/mail/statistics
    統計情報ファイル

/var/spool/mqueue/*
    テンポラリファイル

関連項目
mail(1), syslog(3), aliases(5), mailaddr(7), mail.local(8), rc(8), rmail(8)

DARPA Internet Request For Comments RFC819, RFC821, RFC822. Sendmail Installation and Operation Guide, No. 8, SMM.

http://www.sendmail.org/

歴史
sendmail コマンドは 4.2BSD から登場しました。