本文部分に対して意味が定義されている頭領域は "Content-" で始まる名前を
持つもののみです。他の全ての頭領域は本文部分では無視されます。
これは全然可能であるならば通常はそのままにしておくべきですが、
必要ならば関門により捨てられるかもしれません。このような他の領域
が本文部分に出現することは認められますが、それに依存してはいけません。
"X-" 領域を実験あるいは私的な目的で作成しても構いませんが、
そこに含まれる情報は関門で失われ得ることを認識している必要があります。
RFC 822 メッセージと本文部分の区別はわずかですが、重要です。
例えば Internet と X.400 のメイル関門は、画像を含む本文部分と
本文が JPEG 画像のカプセル化メッセージが含まれている本文部分の違いを
知り得る必要があります。後者を表現するためには、本文部分に
"Content-Type: message/rfc822" をつけ、その本文 (空行の後)
に "" 頭領域を持ったカプセル化メッセージを入れなければなりません。
同様の構文を使うことでメッセージの本文部分への変換が促進されますし、
逆に実装者は2つの区別を理解しなければなりません。
(部分が実際メッセージである特別な場合のために、 "digest"
亜型も定義します。)
現在及び将来の全ての "multipart" の亜型は同じ構文を使用しなければなりません。
亜型はその意味において異なるでしょうし、構文に追加の制限を加えても
構いませんが、 "multipart" 型の要求構文に適合しなければなりません。
この要求事項があるので、全ての適合利用者代理者は、その亜型が認識出来ない
ものであっても、多部分実体の部分を少なくても認識・分離することが
出来るでしょう。
CTE 領域の定義で述べたように、 ... 以外の符号化は "multipart" 型の
実体には認められていません。 "multipart" 境界区切りと
頭領域は常にいかなる場合においても7ビット US-ASCII で (非 US-ASCII
頭文を RFC 2047 により符号化しても構いませんが。) 表現しなければ
なりません。また本文部文中のデータは、部分ごとに、
適切な各本文部分の CTE 領域をつけて符号化することが出来ます。
This section defines a common syntax for subtypes of "multipart".
All subtypes of "multipart" must use this syntax. A simple example
of a multipart message also appears in this section. An example of a
more complex multipart message is given in RFC 2049.
この節では "multipart" の亜型の共通の構文を定義します。
"Multipart" の全ての亜型はこの構文をつかわなければなりません。
多部分メッセージの単純な例もこの節に提示します。より複雑な多部分メッセージ
の例は RFC 2049 にあります。
The Content-Type field for multipart entities requires one parameter,
"boundary". The boundary delimiter line is then defined as a line
consisting entirely of two hyphen characters ("-", decimal value 45)
followed by the boundary parameter value from the Content-Type header
field, optional linear whitespace, and a terminating CRLF.
多部分実体の CT 領域では、パラメーター "boundary" が必要です。
境界区切行は2つのハイフン文字 ("-", 10進値45) とそれに続けて
CT 頭領域から boundary パラメーター値, 省略可能な行空白間隔, 終端 CRLF
の全体から構成されます。
NOTE: The hyphens are for rough compatibility with the earlier RFC
934 method of message encapsulation, and for ease of searching for
the boundaries in some implementations. However, it should be noted
that multipart messages are NOT completely compatible with RFC 934
encapsulations; in particular, they do not obey RFC 934 quoting
conventions for embedded lines that begin with hyphens. This
mechanism was chosen over the RFC 934 mechanism because the latter
causes lines to grow with each level of quoting. The combination of
this growth with the fact that SMTP implementations sometimes wrap
long lines made the RFC 934 mechanism unsuitable for use in the event
that deeply-nested multipart structuring is ever desired.
参考: ハイフンは、かつての RFC 934 のメッセージのカプセル化方式
との大雑把な互換性と、幾つかの実装で区切りを探すのを容易にする
ためにあります。しかし、多部分メッセージは RFC 934 カプセル化と
完全には互換でないことに注意して下さい。特に、 RFC 934 の、ハイフンで始まる
埋め込み行の quote 記法には従っていません。 RFC 934 の方式では
quote の各段階ごとに行が長くなっていきます。
この成長と、 SMTP 実装がしばしば長い行を折り返すという実情から、
RFC 934 の方式は深く入れ子になった多部分構造もが望ましいところで
使うのには不適切ということになります。
WARNING TO IMPLEMENTORS: The grammar for parameters on the Content-
type field is such that it is often necessary to enclose the boundary
parameter values in quotes on the Content-type line. This is not
always necessary, but never hurts. Implementors should be sure to
study the grammar carefully in order to avoid producing invalid
Content-type fields. Thus, a typical "multipart" Content-Type header
field might look like this:
実装者への警告: CT 領域のパラメーターの文法から、 boundary パラメータ値を
CT 行において引用符で囲む必要がしばしばあります。これは常に必要では
ありませんが、囲んでおけば損傷することはありません。
実装者は不適切な CT 領域を生成しないように、文法を良く研究するべきです。
よって、典型的な "" CT 頭領域はこのようになります。
Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08j34c0p
But the following is not valid:
しかし次のものは(コロンのため)妥当ではありません。
Content-Type: multipart/mixed; boundary=gc0pJq0M:08jU534c0p
(because of the colon) and must instead be represented as
代わりに次のように表現しなければなりません。
Content-Type: multipart/mixed; boundary="gc0pJq0M:08jU534c0p"
This Content-Type value indicates that the content consists of one or
more parts, each with a structure that is syntactically identical to
an RFC 822 message, except that the header area is allowed to be
completely empty, and that the parts are each preceded by the line
この CT 値は、内容が一つ以上の部分から構成されていて、
それぞれが、頭領域は完全に空でも良いことを除いて
RFC 822 メッセージと構文的には同じ構造を持っていて、
部分はそれぞれ次の行が前にあることを示します。
--gc0pJq0M:08jU534c0p
The boundary delimiter MUST occur at the beginning of a line, i.e.,
following a CRLF, and the initial CRLF is considered to be attached
to the boundary delimiter line rather than part of the preceding
part. The boundary may be followed by zero or more characters of
linear whitespace. It is then terminated by either another CRLF and
the header fields for the next part, or by two CRLFs, in which case
there are no header fields for the next part. If no Content-Type
field is present it is assumed to be "message/rfc822" in a
"multipart/digest" and "text/plain" otherwise.
境界区切りは行のはじめ、すなわち CRLF の後に出現しなければ
なりません。最初の CRLF は前の部分ではなく境界区切行の
付属するものと考えます。区切りの後には0文字以上の行空白間隔が続いても
構いません。その後の別の CRLF と次の部分の頭領域, または2つの CRLF
で終端となります。後者の場合は次の部分の頭領域はありません。
CT 領域が無い場合、 "" では "" が, それ以外では "" が仮定されます。
NOTE: The CRLF preceding the boundary delimiter line is conceptually
attached to the boundary so that it is possible to have a part that
does not end with a CRLF (line break). Body parts that must be
considered to end with line breaks, therefore, must have two CRLFs
preceding the boundary delimiter line, the first of which is part of
the preceding body part, and the second of which is part of the
encapsulation boundary.
参考: 境界区切りの前の CRLF は概念的には境界に付属するものですから、
CRLF (改行) で終わらない部分を作ることが可能なわけです。また、
改行で終わると考えなければならない本文部分では、境界区切行の前に
2つの CRLF がなければなりません。最初のものは前の本文部分の一部で、
2番目のものはカプセル化境界の一部です。
Boundary delimiters must not appear within the encapsulated material,
and must be no longer than 70 characters, not counting the two leading hyphens.
境界区切りはカプセル化されたものの中には出現してはならず、
2つの先導ハイフンを数えないで、70文字を超えてもならりません。
The boundary delimiter line following the last body part is a
distinguished delimiter that indicates that no further body parts
will follow. Such a delimiter line is identical to the previous
delimiter lines, with the addition of two more hyphens after the
boundary parameter value.
最後の本文部分に続く境界区切行は、それ以上本文部分が
続かないことを示す違った区切りになります。この区切行は今までの
区切行に、2つのハイフンを boundary パラメーター値の後に加えたもの
になります。
--gc0pJq0M:08jU534c0p--
NOTE TO IMPLEMENTORS: Boundary string comparisons must compare the
boundary value with the beginning of each candidate line. An exact
match of the entire candidate line is not required; it is sufficient
that the boundary appear in its entirety following the CRLF.
実装者への参考: 境界文字列比較は、各候補行の最初と境界値を
比較します。候補行全体との正確な一致は必要ありません。
CRLF の直ぐ後に境界が出現すれば十分です。
There appears to be room for additional information prior to the
first boundary delimiter line and following the final boundary
delimiter line. These areas should generally be left blank, and
implementations must ignore anything that appears before the first
boundary delimiter line or after the last one.
最初の境界区切行の前と最後の境界区切行の後に追加情報の場所があります。
この領域は通常からにしておくべきで、実装は最初の境界区切行の前や
最後のの後に出現するものを全て無視しなければなりません。
NOTE: These "preamble" and "epilogue" areas are generally not used
because of the lack of proper typing of these parts and the lack of
clear semantics for handling these areas at gateways, particularly
X.400 gateways. However, rather than leaving the preamble area
blank, many MIME implementations have found this to be a convenient
place to insert an explanatory note for recipients who read the
message with pre-MIME software, since such notes will be ignored by
MIME-compliant software.
参考 この "preamble" (前書き) と "epoligue" (後書き)
は、適切な型付けが出来なく、
関門でのこれらの領域の取り扱いでの意味が明確になっていないので、通常
使われません。しかし、前書き領域を空にしておくのではなく、
多くの MIME 実装は、 MIME 以前のソフトウェアでメッセージを読む受信者への
説明メモを挿入する都合の良い場所としています。このメモは
MIME 適合ソフトウェアには無視されますから。
NOTE: Because boundary delimiters must not appear in the body parts
being encapsulated, a user agent must exercise care to choose a
unique boundary parameter value. The boundary parameter value in the
example above could have been the result of an algorithm designed to
produce boundary delimiters with a very low probability of already
existing in the data to be encapsulated without having to prescan the
data. Alternate algorithms might result in more "readable" boundary
delimiters for a recipient with an old user agent, but would require
more attention to the possibility that the boundary delimiter might
appear at the beginning of some line in the encapsulated part. The
simplest boundary delimiter line possible is something like "---",
with a closing boundary delimiter line of "-----".
参考: 境界区切りはカプセル化されている本文部分に出現してはならないので、
利用者代理者は独特な boundary パラメーター値を選ぶのに注意しなければなりません。
上の例にある boundary パラメーター値は、カプセル化されるデータを
予め確認せずに、データ中に
存在する確率が非常に低い境界区切りを生成するように設計された算法の結果
であるとしましょう。他の算法ではより「可読」な境界区切りを、
古い利用者代理者の受信者のために使うかもしれません。しかしその場合は
境界区切リがカプセル化されたデータの中の幾つかの行のはじめに
現れるかもしれない可能性により注意する必要がありましょう。
いちばん簡単な可能な境界区切行は "---" のようなもので、
この場合閉じ境界区切行は "-----" となります。
As a very simple example, the following multipart message has two
parts, both of them plain text, one of them explicitly typed and one
of them implicitly typed:
非常に単純な例として、次の多部分メッセージは2つの部分があり、
両方とも平文で、1つは明示的に型を示していませんが、他方は明示的に
示しています。
From: Nathaniel Borenstein <nsb@bellcore.com>
To: Ned Freed <ned@innosoft.com>
Date: Sun, 21 Mar 1993 23:56:48 -0800 (PST)
Subject: Sample message
MIME-Version: 1.0
Content-type: multipart/mixed; boundary="simple boundary"
This is the preamble. It is to be ignored, though it
is a handy place for composition agents to include an
explanatory note to non-MIME conformant readers.
--simple boundary
This is implicitly typed plain US-ASCII text.
It does NOT end with a linebreak.
--simple boundary
Content-type: text/plain; charset=us-ascii
This is explicitly typed plain US-ASCII text.
It DOES end with a linebreak.
--simple boundary--
This is the epilogue. It is also to be ignored.
これは前書きです。これは無視されますが、
非 MIME 適合読者のために説明メモを入れるのに、
構成代理者にとって手軽な場所であります。
これは暗黙の内に US-ASCII の平文に型付けしています。
改行で終わりません。
これは明示的に US-ASCII の平文に型付けしています。
これは改行でおわります。
これは後書きです。これも無視されます。
The use of a media type of "multipart" in a body part within another
"multipart" entity is explicitly allowed. In such cases, for obvious
reasons, care must be taken to ensure that each nested "multipart"
entity uses a different boundary delimiter. See RFC 2049 for an
example of nested "multipart" entities.
他の "" 実体中の本文部分での媒体型 "" の使用は明示的に認められます。
その様な場合、明白な理由により、各入れ子 "" 実体が
違う境界区切を使うことが確実になるように注意しなければなりません。
入れ子の "" 実態の例は RFC 2049 を見て下さい。
The use of the "multipart" media type with only a single body part
may be useful in certain contexts, and is explicitly permitted.
一つだけの本文部分の "" 媒体型の使用は場面によっては有用かも
しれず、明白に認められます。
NOTE: Experience has shown that a "multipart" media type with a
single body part is useful for sending non-text media types. It has
the advantage of providing the preamble as a place to include
decoding instructions. In addition, a number of SMTP gateways move
or remove the MIME headers, and a clever MIME decoder can take a good
guess at multipart boundaries even in the absence of the Content-Type
header and thereby successfully decode the message.
参考: 経験的には、1つの本文部分の "" 媒体型は、
非 text 媒体型を送るのに便利です。前書きを復号指示の場所
として提供できるという利点があります。加えて、多くの
SMTP 関門が MIME 頭を動かしたり消したりします。
りこうな MIME 復号者は、 CT 頭が無くても多部分境界のうまい推定
が出来ますから、これによりメッセージの復号が成功します。
The only mandatory global parameter for the "multipart" media type is
the boundary parameter, which consists of 1 to 70 characters from a
set of characters known to be very robust through mail gateways, and
NOT ending with white space. (If a boundary delimiter line appears to
end with white space, the white space must be presumed to have been
added by a gateway, and must be deleted.) It is formally specified
by the following BNF:
"" 媒体型の共通の必須パラメーターは boundary パラメーターだけです。
これはメイル関門で非常に強いと言われている文字の集合から、
1〜70文字使って構成するもので、空白間隔で終わりません。
(境界区切行が空白間隔で終わって現れた場合、空白間隔は
関門で追加されたものとして考えて削除しなければなりません。)
次に示す BNF が正式な規定です。
boundary := 0*69<bchars> bcharsnospace
bchars := bcharsnospace / " "
bcharsnospace := DIGIT / ALPHA / "'" / "(" / ")" /
"+" / "_" / "," / "-" / "." /
"/" / ":" / "=" / "?"
Overall, the body of a "multipart" entity may be specified as follows:
概して、 "multipart" 実体の本文は次のように規定することが出来ます。
dash-boundary := "--" boundary
; boundary taken from the value of
; boundary parameter of the
; Content-Type field.
; CT 領域の boundary パラメーターの値から採った境界
multipart-body := [preamble CRLF]
dash-boundary transport-padding CRLF
body-part *encapsulation
close-delimiter transport-padding
[CRLF epilogue]
transport-padding := *LWSP-char
; Composers MUST NOT generate
; non-zero length transport
; padding, but receivers MUST
; be able to handle padding
; added by message transports.
; 構成者は0で無い長さの転送埋めを生成してはなりませんが、
受信者はメッセージ転送者が加えた埋めを扱えなければ
なりません。
encapsulation := delimiter transport-padding
CRLF body-part
delimiter := CRLF dash-boundary
close-delimiter := delimiter "--"
preamble := discard-text
epilogue := discard-text
discard-text := *(*text CRLF) *text
; May be ignored or discarded.
; 無視したり捨てたりして構いません。
body-part := MIME-part-headers [CRLF *OCTET]
; Lines in a body-part must not start
; with the specified dash-boundary and
; the delimiter must not appear anywhere
; in the body part. Note that the
; semantics of a body-part differ from
; the semantics of a message, as
; described in the text.
; body-part 中の行は指定された dash-boundary で始まってはなりませんし、
delimiter は本文部文中のどこにも現れてはなりません。なお、
body-part の意味は、文中に述べたようにメッセージの意味とは異なります。
OCTET := <any 0-255 octet value>
IMPORTANT: The free insertion of linear-white-space and RFC 822
comments between the elements shown in this BNF is NOT allowed since
this BNF does not specify a structured header field.
重要: この BNF 中の要素間への lws と RFC 822 注釈の自由な挿入は、
この BNF が構造化頭領域を規定するものではないので、
認められません。
NOTE: In certain transport enclaves, RFC 822 restrictions such as
the one that limits bodies to printable US-ASCII characters may not
be in force. (That is, the transport domains may exist that resemble
standard Internet mail transport as specified in RFC 821 and assumed
by RFC 822, but without certain restrictions.) The relaxation of
these restrictions should be construed as locally extending the
definition of bodies, for example to include octets outside of the
US-ASCII range, as long as these extensions are supported by the
transport and adequately documented in the Content- Transfer-Encoding
header field. However, in no event are headers (either message
headers or body part headers) allowed to contain anything other than
US-ASCII characters.
参考: ある転送 enclave では、本文を印字可能 US-ASCII 文字
に制限するといった RFC 822 の制限が強制されていないかもしれません。
(すなわち、ある制限を除いた RFC 821 で規定された標準 Internet メイル転送に似た、
そして RFC 822 と見せかけた転送範囲が存在するかもしれません。)
こうした制限の緩和は、
例えば US-ASCII 範囲外のオクテットを含めることは、
これらの拡張を転送が対応していて、 CTE 頭領域で十分に明示される限りは、
本文の定義の局地的な拡張と解釈するべきです。しかし、頭
(メッセージ頭と本文部分かしら共に) で US-ASCII 以外の文字を含めることは
認められません。
NOTE: Conspicuously missing from the "multipart" type is a notion of
structured, related body parts. It is recommended that those wishing
to provide more structured or integrated multipart messaging
facilities should define subtypes of multipart that are syntactically
identical but define relationships between the various parts. For
example, subtypes of multipart could be defined that include a
distinguished part which in turn is used to specify the relationships
between the other parts, probably referring to them by their
Content-ID field. Old implementations will not recognize the new
subtype if this approach is used, but will treat it as
multipart/mixed and will thus be able to show the user the parts that
are recognized.
参考: "multipart" 型に目立って欠けているのは、本文部分に関する構造の記述です。
より構造化された, よりまたは統合されたメッセージ機能を提供しようと
する時は、構造的には同じであるが各部分間の関係を定義した多部分の
亜型を定義するべきです。例えば、ある多部分の亜型は、特別な部分を含み、
次にはこれが他の部分との関係を指定する (おそらくは
Content-ID 領域を参照するのに使って。) のに使われるというように定義出来ます。
この方法が使われた時に古い実装は新しい亜型を認識できませんが、
multipart/mixed であるものとして扱い、認識できる部分を利用者に示す
ことが出来るでしょう。