MIME

위키百科, 우리 모두의 百科事典.

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

外部 링크 [ 編輯 ]