このセッションを終了することを指示するコマンド。TOに関する情報を送るコマンド。TOを指定した場合は複数回送られる。SMTPのDATAに関する情報を送るコマンド。SMTPで未知のコマンドを指定されたときに送るコマンド。IDにはコマンドの名前と関連がある文字が使われていることが多いので、データを生で見てもなんとなくわかることがあります。重要なコマンドについて補足します。マクロ定義コマンドマクロ定義コマンドは特殊なコマンドです。マクロ定義コマンドは次に送るコマンドの付加情報を送るコマンドです。付加情報はキーと値のペアのリストです。マクロ定義コマンドに対してmilterは応答しません。次の各コマンドの前にMTAが送ります。TOコマンド毎)DATAコマンドヘッダー終了コマンドメッセージ終了コマンド図にすると次のようになります。応答ただし、これはSendmailの動作です。Postfixは「ヘッダーコマンド」と「本文チャンク」のときもマクロ定義コマンドを送ってきます。「ヘッダーコマンド」の場合は「ヘッダー終了コマンド」用のマクロ定義コマンドを送ってきて、「本文チャンクコマンド」の場合は「メッセージ終了コマンド」用のマクロ定義コマンドを送ってきます。マクロ定義コマンドのフォーマットは次の通りです。|「コマンドID」はどのコマンド用のマクロ定義なのかを示すIDです。前述のコマンドIDと同じ値です。HELOコマンド用のマクロ定義コマンドなら「H」です。「マクロ定義リスト」のフォーマットは次の通りです。|キーは「{...}」というように「{」と「}」で囲まれている場合もあれば囲まれていない場合もあります。Postfixが送るマクロ定義はmilter_connect_macrosなどで指定します。ネゴシエーションコマンドネゴシエーションコマンドはかなり特殊なコマンドです。セッション開始時にMTAからmilterに1度だけ送ります。ネゴシエーションコマンドでMTAとmilter間で次のことを決めます。milterプロトコルのバージョンアクション(milterがどんな操作をするか)ステップ(MTAとmilter間のやりとりについて)ネゴシエーションコマンドでは次のようにMTAとmilterで送りあうデータのフォーマットは同じです。ーMTAからmilterに送るときはMTAがサポートしている機能の情報を送り、milterがMTAに応答するときはmilterが要求する機能の情報を送ります。MTAがサポートしていない機能をmilterが要求するとネゴシエーションは失敗し、セッションは確立しません。データのフォーマットは次の通りです。|「バージョン」、「アクション」、「ステップ」はすべて4バイトの符号なし整数で、ネットワークバイトオーダーです。アクション、ステップは各ビットに意味を割り当てています。(フラグになっているということです。)「バージョン」はMTAが提示したバージョンよりも低いバージョンをmilterが指定しても構いません。Postfixは「6」を提示し、milterが「2」を返してもよいです*5。「アクション」のフラグは次の通りです。milterがマクロ定義を上書きできるか(詳細は後述するマクロリストを参照)「ステップ」のフラグは次の通りです。MTAがヘッダーの値の先頭の空白を削除しない。xxx」をmilterに送るということ。このフラグを落とすと先頭の空白を削除して「xxx」をmilterに送る。「MTAが○○コマンドを送らない」について補足します。このフラグを使うとmilterが必要のないコマンドを送ってこないようにMTAに指示することができます。メール本文が必要ない場合は本文チャンクコマンドを送らないようにすることで、通信量が減りパフォーマンスがあがります。同様に「milterが○○コマンドに応答しない」について補足します。後述しますが、応答時にはmilterは「このメールを拒否する」、「このメールは受け取る」などをMTAに伝えることができます。milterが特定のコマンドに対して必ず「次の処理にいってくれ」と応答することが事前にわかっている場合は、MTAはmilterの応答を待たずに次の処理にいきます。これもパフォーマンス向上につながります。「マクロリスト」はユーザーがmilter_connect_macrosなどで指定した値をmilterが上書きするためにあります*6。指定した場合は次のようなフォーマットになります。|「マクロの種類」は4バイトの符号なし整数で次の値のどれかです。ヘッダー終了コマンド用マクロマクロ定義コマンドでは「コマンドID」を使っていましたが、ここでは独自の値になることに注意してください。他のコマンド2014/12/10中ではまとめきれなかったので他のコマンドは省略します。次は個々のやりとりのうち「milterから送るデータ」について説明します。milterから送るデータを応答と呼びます。応答のID、名前、説明は次の通りです。