MIME
(
英語
:
Multipurpose Internet Mail Extensions
)는
電子 郵便
을 위한 인터넷 標準 포맷이다. 電子 郵便은 7비트
ASCII
文字를 使用하여 電送되기 때문에 8비트 以上의 코드를 使用하는 文字나
李瑱 파일
들은 MIME 포맷으로 變換되어
SMTP
로 電送된다. 實質的으로 SMTP로 電送되는 大部分의 電子 郵便은 MIME 形式이다. MIME 標準에 定義된 content types은
HTTP
와 같은 通信 프로토콜에서 使用되며, 漸次 그 重要性이 커지고 있다.
槪要
[
編輯
]
基本的으로 인터넷 電子 郵便 電送 프로토콜인 SMTP는 7비트
ASCII
文字만을 支援한다. 이것은 7비트 ASCII 文字로 表現할 수 없는 英語 以外의 言語로 쓰인 電子 郵便은 제대로 電送될 수 없다는 것을 意味한다. MIME은 ASCII가 아닌
文字 인코딩
을 利用해 英語가 아닌 다른 言語로 된 電子 郵便을 보낼 수 있는 方式을 定義한다. 또한 그림, 音樂, 映畫, 컴퓨터 프로그램과 같은 8비트짜리 李瑱 파일을 電子 郵便으로 보낼 수 있도록 한다. MIME은 또한 電子 郵便과 비슷한 形式의 메시지를 使用하는
HTTP
와 같은 通信 프로토콜의 基本 構成 要素이다. 메시지를 MIME 形式으로 變換하는 것은 電子 郵便 프로그램이나 서버 床에서 自動으로 이루어진다.
電子 郵便의 基本的인 形式은 RFC 2821에서 定義하고 있다. 이 文書는 RFC 822를 代替한다. 이 文書는 텍스트 電子 郵便의 헤더와 本文의 形式을 明示하고 있으며, 그中에는 우리에게 익숙한 "To:", "Subject:", "From:", "Date:" 等의 헤더가 包含되어 있다. MIME은 메시지의 種類를 나타내는
content-type
, 메시지 인코딩 方式을 나타내는
content-transfer-encoding
과 같은 追加的인
電子 郵便
헤더를 定義하고 있다. MIME은 또한 ASCII가 아닌 文字를 電子 郵便 헤더로 使用할 수 있도록 規定하고 있다.
MIME은 擴張 可能하다. MIME 標準은 새로운
content-type
과 또 다른 MIME 屬性 값을 登錄할 수 있는 方法을 定義하고 있다.
MIME의 明示的인 目標 中 하나는 旣存 電子 郵便 시스템과의 互換性이다. MIME을 支援하는 클라이언트에서 비 MIME가 제대로 標示될 수 있고, 反對로 MIME을 支援하지 않는 클라이언트에서 簡單한 MIME 메시지가 標示될 수 있다.
MIME 헤더
[
編輯
]
MIME-Version
[
編輯
]
이 헤더는 該當 메시지가 MIME 形式임을 나타낸다. 現在 使用되는 값은 "1.0"이므로 아래와 같이 使用할 수 있다.
MIME-Version: 1.0
Content-Type
[
編輯
]
이 헤더는 메시지의 타입과 서브타입을 나타낸다. 例를 들면
Content-Type: text/plain
타입과 서브타입을 合쳐 MIME 타입이라 부른다.
Internet media type
이라고도 부른다. 다양한 파일 포맷이 MIME 타입으로 登錄되어 있다.
text
타입은
charset
因子를 가질 수 있으며 이 因子는
文字 인코딩
을 指定한다.
content-type
헤더와 MIME 타입은
電子 郵便
을 위해 定義된 것이지만, 이제는
HTTP
,
SIP
와 같은 인터넷 프로토콜에서 함께 使用하고 있다. MIME 타입 登錄은
IANA
에서 管理하고 있다.
multipart
메시지 타입을 통해 MIME은 트리 構造의 메시지 形式을 定義할 수 있다. 이 方式은 다음을 支援한다.
- text/plain
을 통한 單純 텍스트 메시지 ("Content-type:"의 基本값")
- 添附가 包含된 텍스트 (
text/plain
파트와 텍스트가 아닌 파트로 構成된
multipart/mixed
). 파일을 添附한 MIME 메시지는 "Content-disposition:" 헤더를 통해 파일의 本來 이름을 指定한다. 파일의 種類는 MIME의 content-type 헤더와 파일 擴張字를 통해 알 수 있다.
- 元本 메시지가 添附된 答狀 메시지 (
text/plain
파트와 元本 메시지를 나타내는
message/rfc822
파트로 構成된
multipart/mixed
)
- 評文 텍스트와
HTML
과 같이 다른 포맷을 함께 보낸 메시지 (
multipart/alternative
)
- 그 外 다양한 메시지 構造들
Content-Transfer-Encoding
[
編輯
]
MIME (
RFC 2045
)는 바이너里 데이터를
ASCII
텍스트 形式으로 變換하기 위한 몇가지 方法을 定義하고 있다.
content-transfer-encoding
MIME 헤더를 통해 變換 方式을 指定한다. RFC 文書와 電送 인코딩에 對한
IANA 目錄
은 다음을 定義하고 있다.
- 一般 SMTP에 使用 可能
- 7bit
- [1..127]의 ASCII 코드로 이루어진 데이터로 줄 單位로 表現하며 各 줄을 CR, LF로 끝난다. 한 줄의 最大 길이는 CR (ASCII 코드 13), LF (ASCII 코드 10)를 除外하고 998字이다.
- quoted-printable
- 若干의 바이너里 데이터가 包含된 US-ASCII로 이루어진 텍스트 데이터를 表現할 때 效果的이다. US-ASCII는 特別한 變換을 거치지 않고 그대로 標示되기에 效率的이며 인코딩韓 데이터를 사람이 理解할 수 있다.
- base64
- 任意의 바이너里 데이터를 7비트 데이터로 變換한다. 固定된 오버헤드가 發生하고 비 텍스트 데이터의 變換 時 使用한다.
- 8BITMIME
支援하는 SMTP 서버에 使用 可能
- 8bit
- 8비트로 表現된 데이터로 한 줄 黨 998字로 表現하며 CR, LF로 끝난다.
- binary
- 一連의 octets. SMTP에서는 使用할 수 없다.
Encoded-Word
[
編輯
]
RFC 2822의 定義에 따르면 메시지 헤더와 그 값은 恒常 ASCII 文字를 使用해야 한다. ASCII가 아닌 헤더 값은 MIME의
encoded-word
文法(
RFC 2047
)에 따라 인코딩해야 한다. 이 文法은 元本 文字 인코딩("文字셋")과 元本 데이터를 ASCII 文字로 變換하는 데 使用한 인코딩 方式을 包含한다.
encoded-word의 形式: "
=?
文字셋
?
인코딩 方式
?
인코드된 데이터
?=
".
- 文字셋은 普通
utf-8
을 使用한다. 하지만
IANA
에 登錄된 어떤 文字셋도 使用 可能하다.
- 인코딩 方式은
quoted-printable
인코딩 方式과 비슷한 Q-encoding 方式을 나타내는 "
Q
"나
base64
인코딩을 나타내는 "
B
" 中 하나를 使用할 수 있다.
- 인코드된 데이터는 인코딩 方式에 依해 變換된 데이터이다.
Q-encoding과 quoted-printable의 差異
RFC 2047에 따르면, encoded-word는 空白 文字(white space)를 包含해서는 안 된다. 따라서 ASCII 코드로 20h(iso-8859-1에서의 스페이스)인 文字는 인코딩을 거쳐야 한다. ASCII 20h(20h가 空白이 아닐지라도)인 文字는 普通 "_" 文字(ASCII 5Fh)로 變換한다. 空白을 "=20"으로 인코딩韓 것보다 이 方式이 인코드된 데이터의 可讀性을 높여준다.
例를 들어,
Subject: =?utf-8?Q?=C2=A1Hola,_se=C3=B1or!?=
위 文章은 "Subject: ¡Hola, senor!"를 인코딩韓 데이터이다.
encoded-word 形式은 헤더 이름에는 使用할 수 없다. 헤더 이름은 恒常 US-ASCII로 表現해야 한다.
Multipart 메시지
[
編輯
]
MIME multipart 메시지는 "Content-type:" 헤더에 boundary 파라미터를 包含한다. 이 boundary는 다음과 같이 各 메시지 파트를 區分하는 役割을 하며, 메시지의 始作과 끝部分에도 나타난다.
MIME-Version:
1.0
Content-Type:
multipart
/
mixed
;
boundary
=
frontier
This is a message with multiple parts in MIME format.
--frontier
Content-Type:
text
/
plain
This is the body of the message.
--frontier
Content-Type:
application
/
octet-stream
Content-Transfer-Encoding:
base64
PGh0bWw+CiAgPGhlYWQ+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPHA+VGhpcyBpcyB0aGUg
Ym9keSBvZiB0aGUgbWVzc2FnZS48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==
--frontier--
各 파트는
Content-
로 始作하는 自身만의 헤더와 本文을 갖는다. 그리고 multipart 메시지는 重疊 可能하다. 各 파트는 自身만의 文字셋과 인코딩 方式(Content-Transfer-Encoding)을 파트 헤더에서 定義하고 있다. Multipart 메시지에는 아래와 같은 種類가 있다.
Notes:
- 첫 番째 boundary 前에 나오는 內容은 MIME을 支援하지 않는 클라이언트를 위해 提供된다. MIME 互換 클라이언트는 이 內容을 無視한다.
- Boundary를 選擇하는 것은 電子 郵便을 電送하는 클라이언트의 몫이다. 普通 無作爲의 文字를 選擇함으로써 메시지의 本文과 衝突을 避한다.
Mixed
[
編輯
]
Multipart/mixed는 다른 "Content-type" 헤더를 갖는 파일을 電送하는 데 使用한다. 그림이나 쉽게 읽을 수 있는 파일을 電送할 때, 大部分의 電子 郵便 클라이언트는 이를 直接 畵面에 標示할 것이다. 그렇지 않을 境遇 該當 데이터는 添附 파일의 形態로 標示된다. "Content-disposition" 헤더는 添附 파일의 이름을 標示하는 데 使用한다.
Digest
[
編輯
]
RFC 2049에 明示되어 있듯이 multipart/mixed와 multipart/digest는 最小限 支援해야 할 MIME 타입이다. mixed 파트의 基本 content-type은 text/plain이며, digest의 境遇 message/rfc822이다. Multipart/digest는 하나 以上의 메시지를 포워딩 하기 위한 簡便한 方法이다.
Alternative
[
編輯
]
Multipart/alternative 메시지는 同一한 內容을 다른 形式으로 表現할 때 使用된다. 各各의 파트는 서로 다른 "Content-type" 헤더를 가지며, MIME을 支援하지 않는 클라이언트에서 處理를 쉽게 하고자 表現하기 쉬운 形式에서 複雜한 形式 順으로 메시지에 나타난다. 따라서 메일 클라이언트는 各 파트를 順序대로 檢索하여 自身이 表現할 수 있는 마지막 파트를 選擇하게 된다. 一部 클라이언트는 이런 順序를 無視한 채 自身이 選好하는 形式을 標示하기도 한다. 一般的으로 오래된 클라이언트를 위해 text/plain 타입의 파트가 먼저 나오고 最新 클라이언트를 위해 text/html 타입의 파트가 나온다.
예전
스팸 防止 필터
는 text/html 파트보다 파싱이 쉽다는 理由로 메시지의 text/plain 파트 만을 檢査했다.
스패머
들은 이러한 點을 惡用해 메시지의 text/plain 파트에는 平凡한 內容을 넣고 代身 text/html에는 廣告를 包含하였다. 이런 方式을 막기 위해 스팸 防止 소프트웨어는 multipart/alternative 메시지 中 各 파트가 매우 相異한 內容을 가질 境遇 이를 스팸 메시지로 處理하는 式으로 該當 메시지를 걸러낸다.
Related
[
編輯
]
Multipart/related는 相互 聯關된 여러 個의 파트들로 構成된 메시지이다. 各各의 파트들은 root 타입을 中心으로 內部的으로 連結되며, 各 파트를 參照하기 위해서 一般的으로 파트의 content-ID를 使用한다. Multipart/related의 type 파라미터는 root 파트의 content-type을 指定하며 必須 파라미터이다. Start 파라미터는 root 파트의 content-ID를 指定하며 start 파라미터가 없을 境遇에는 가장 먼저 나오는 파트가 root 파트가 된다.
Multipart/related의 使用 例로 이미지가 包含된
HTML
文書를 들 수 있다. 이 境遇 root 파트는 HTML 文書가 되며 HTML에 包含된 이미지들은 뒷따르는 파트로 構成하고 HTML 內部에서 이를 參照하는 式으로 表現할 수 있다.
Report
[
編輯
]
Multipart/report 메시지는 메일 서버를 위한 形式化된 데이터를 包含한다. 이 메시지 타입은 text/plain과 message/delivery-status로 나뉜다.
Signed
[
編輯
]
Multipart/signed 메시지는 本文과 署名 파트를 갖는다. MIME 헤드를 包含하는 本文 파트는 署名을 生成하기 위해 使用된다. Application/pgp-signature, application/x-pkcs7-signature 等의 署名이 使用된다.
Encrypted
[
編輯
]
Multipart/encrypted 메시지 타입은 暗號化된 application/octet-stream과 이를 풀기 위한 情報를 갖는 制御 파트로 區分된다.
參照
[
編輯
]
- RFC 1847
- Security Multiparts for MIME: Multipart/Signed and Multipart/Encrypted.
- RFC 2045
- MIME Part One: Format of Internet Message Bodies.
- RFC 2046
- MIME Part Two: Media Types. N. Freed,
Nathaniel Borenstein
. November 1996.
- RFC 2047
- MIME Part Three: Message Header Extensions for Non-ASCII Text.
Keith Moore
. November 1996.
- RFC 4288
- MIME Part Four: Media Type Specifications and Registration Procedures.
- RFC 4289
- MIME Part Four: Registration Procedures. N. Freed, J. Klensin. December 2005.
- RFC 2049
- MIME Part Five: Conformance Criteria and Examples. N. Freed, N. Borenstein. November 1996.
- RFC 2231
- MIME Parameter Value and Encoded Word Extensions: Character Sets, Languages, and Continuations. N. Freed, K. Moore. November 1997.
- RFC 2387
- The MIME Multipart/Related Content-type
外部 링크
[
編輯
]