2. メッセージの字句解析
2.1. 一般的な説明
最も基本的なレベルでは、メッセージは一連の文字です。本仕様に適合するメッセージは、1 から 127 までの範囲の値を持つ文字で構成され、US-ASCII [ANSI.X3-4.1986] 文字として解釈されます。簡潔さのために、本文書ではこの範囲の文字を単に "US-ASCII 文字" と呼ぶことがあります。
注意: 本文書は、メッセージが 1 から 127 までの US-ASCII の範囲の文字で構成されることを規定しています。この仕様を拡張して、その範囲外の値を許容する他の文書、具体的には MIME 文書シリーズ ([RFC2045]、[RFC2046]、[RFC2047]、[RFC2049]、[RFC4288]、[RFC4289]) があります。それらの機構についての議論は本仕様の適用範囲内ではありません。
メッセージは文字の行に分割されます。行は、復帰 (carriage-return) と改行 (line-feed) の 2 文字、すなわち復帰 (CR) 文字 (ASCII 値 13) の直後に改行 (LF) 文字 (ASCII 値 10) が続くものによって区切られる一連の文字です。(復帰/改行の対は、本文書では通常 "CRLF" と書かれます。) メッセージは、ヘッダーフィールド (まとめて「メッセージのヘッダーセクション」と呼ばれます) と、その後に任意で続く本文で構成されます。ヘッダーセクションは、本仕様で定義される特別な構文を持つ文字の行の並びです。本文は、ヘッダーセクションに続く単なる文字の並びであり、空行 (すなわち、CRLF の前に何もない行) によってヘッダーセクションから区切られます。
注意: 一般的な言い回しや本仕様の以前の版では、"header" という用語を、ヘッダーセクション全体を指すためか、個々のヘッダーフィールドを指すために使用していました。曖昧さを避けるため、本文書では "header" や "headers" という用語を単独では使用せず、代わりに個々のフィールドを指す場合には常に "ヘッダーフィールド (header field)" を、集合全体を指す場合には "ヘッダーセクション (header section)" を使用します。
2.1.1. 行長の制限
本仕様が 1 行の文字数に課す制限は 2 つあります。文字の各行は CRLF を除いて 998 文字以下でなければならず (MUST)、78 文字以下であるべきです (SHOULD)。
998 文字という制限は、IMF メッセージを送信、受信、または保存する多くの実装における制限によるものです。それらの実装は、1 行に 998 文字を超える文字を単純に扱うことができません。受信側の実装は、堅牢性のために、1 行に任意の大きな数の文字を扱えるようにするのがよいでしょう。しかし、([RFC5321] の伝送要件に準拠して) 1 行あたり CR と LF を含めて 1000 文字を超える文字を含むメッセージを受け入れない実装が非常に多いため、実装がそのようなメッセージを生成しないことが重要です。
より保守的な 78 文字という推奨は、これらのメッセージを表示するユーザーインターフェースの多くの実装に対応するためのものです。それらの実装は、1 行あたり 78 文字を超える表示を切り捨てたり、悲惨な形で折り返したりする可能性があり、そのような実装が本仕様の意図 (および、実際に情報の喪失を引き起こす場合には [RFC5321] の意図) に適合していないという事実があるにもかかわらず、そうなります。繰り返しますが、この制限はメッセージに課されるものですが、堅牢性のために、メッセージを表示する実装は、1 行に任意の大きな数の文字を (少なくとも確実に 998 文字の制限までは) 扱えるようにする義務があります。
2.2. ヘッダーフィールド
ヘッダーフィールドは、フィールド名で始まり、コロン (":") が続き、フィールド本体が続き、CRLF で終端される行です。フィールド名は、コロンを除き、印刷可能な US-ASCII 文字 (すなわち、33 から 126 までの値を持つ文字) で構成されなければなりません (MUST)。フィールド本体は、印刷可能な US-ASCII 文字に加えて、スペース (SP、ASCII 値 32) と水平タブ (HTAB、ASCII 値 9) の文字 (合わせて空白文字、WSP と呼ばれます) で構成することができます。フィールド本体は、セクション 2.2.3 で記述される「折り返し (folding)」と「展開 (unfolding)」で使用される場合を除き、CR と LF を含んではなりません (MUST NOT)。すべてのフィールド本体は、本仕様のセクション 3 とセクション 4 で記述される構文に適合しなければなりません (MUST)。
2.2.1. 非構造化ヘッダーフィールド本体
本仕様における一部のフィールド本体は、単に「非構造化 (unstructured)」として (セクション 3.2.5 で、印刷可能な US-ASCII 文字に空白文字を加えたものとして規定されています)、それ以上の制限なしに定義されています。これらは非構造化フィールド本体と呼ばれます。意味論的には、非構造化フィールド本体は (セクション 2.2.3 で記述される「折り返し」と「展開」を除き) それ以上の処理を伴わない単一の文字行として扱われるだけです。
2.2.2. 構造化ヘッダーフィールド本体
本仕様における一部のフィールド本体は、上で記述した非構造化フィールド本体よりも制限の厳しい構文を持ちます。これらは「構造化 (structured)」フィールド本体と呼ばれます。構造化フィールド本体は、本仕様のセクション 3 とセクション 4 で記述される特定の字句トークンの並びです。これらのトークンの多くは、(その構文に従って) コメント (セクション 3.2.2 で記述) や空白文字で導入または終端することが許されており、それらの空白文字はセクション 2.2.3 で記述される「折り返し」と「展開」の対象となります。構造化フィールド本体の意味論的な分析は、その構文とともに与えられます。
2.2.3. 長いヘッダーフィールド
各ヘッダーフィールドは、論理的には、フィールド名、コロン、およびフィールド本体から構成される単一の文字行です。しかし、便宜上、また 1 行あたりの 998/78 文字という制限に対処するために、ヘッダーフィールドのフィールド本体の部分は複数行の表現に分割することができます。これは「折り返し (folding)」と呼ばれます。一般的な規則は、本仕様が折り返し空白 (単なる WSP 文字ではないもの) を許容する箇所ではどこでも、任意の WSP の前に CRLF を挿入してよいというものです。
たとえば、次のヘッダーフィールドは、
Subject: This is a test
次のように表現することができます。
Subject: This is a test
注意: 構造化フィールド本体は、多くの字句トークンの間で (場合によっては一部の字句トークンの内部でさえも) 折り返しが行われるように定義されていますが、折り返しは、より高レベルの構文上の区切りに CRLF を置くことに限定されるべきです (SHOULD)。たとえば、フィールド本体がカンマ区切りの値として定義されている場合、他の場所でも折り返しが許されているとしても、構造化された項目を区切るカンマの後に折り返しを行うことが、フィールドを折り返すことができる他の場所よりも推奨されます。
ヘッダーフィールドのこの折り返された複数行の表現から、その単一行の表現へ移る処理は「展開 (unfolding)」と呼ばれます。展開は、直後に WSP が続く CRLF を単に取り除くことによって行われます。さらなる構文解析と意味論的評価のためには、各ヘッダーフィールドは展開された形で扱われるべきです。展開されたヘッダーフィールドには長さの制限がなく、したがって不定に長くなることがあります。
2.3. 本文
メッセージの本文は、単なる US-ASCII 文字の行です。本文に対する唯一の 2 つの制限は次のとおりです。
o CR と LF は CRLF としてのみ一緒に現れなければなりません (MUST)。それらは本文中に独立して現れてはなりません (MUST NOT)。 o 本文中の文字の行は CRLF を除いて 998 文字に制限されなければならず (MUST)、78 文字に制限されるべきです (SHOULD)。
注意: 先に述べたように、この仕様を拡張して (また制限して)、さまざまな種類のメッセージ本文を許容する他の文書、具体的には MIME 文書 ([RFC2045]、[RFC2046]、[RFC2049]、[RFC4288]、[RFC4289]) があります。繰り返しますが、これらの機構は本文書の適用範囲外です。