본문 바로가기

Development

MIME 개념 및 메시지 형식


MIME 개념 및 메시지 형식

 1. MIME(Multipurpose Internet Message Extensions)

- MIME는 말 그대로 Internet Message를 통해서 여러 가지 내용을 보낼 수 있도록 확장한 규격입니다. 예를 들어 SMTP는 ASCII 문자로된 RFC 822 형식의 메시지만 전송 가능합니다. 한국어와 같이 2바이트로 구성되는 다중 언어, 실행 파일, 그림 파일과 같은 이진 파일도 SMTP로 전송될 수 있도록 ASCII코드로 변환하는 코드변환 방식을 MIME라 합니다.

MIME에서는 이진 데이터들을 6비트씩 분할한 후 이를 ascii 문자로 변환하는 base64라고 하는 코드 변환 방식을 사용하여 메일을 송신하고 수신측에서는 이를 복원합니다. 또한 MIME형식으로 변환된 메시지에 대하여 메일의 헤더에 MIME으로 변환된 것임을 알리기 위한 MIME 헤더가 추가된다. 아래의 그림 1은 이러한 MIME으로 변환된 내용이 수납된 RFC 822 메시지 형식으로서 MIME Entity는 MIME header와 MIME으로 처리된 message body로 구성된다.

 

그림 1) MIME 1.1방식을 사용한 메시지 형식의 예

 

- 각 영역의 상세 내역은 표 1과 같습니다.

 

[표 1] - MIME 구성

구성

설명

MIME-Version

사용되는 버전을 명시한다.

Content-Type

메시지 바디 영역에 수납된 내용의 형식을 "TYPE"과 "subtype"으로 지시함으로써 수신측 MUA가 이 내용을 적합하게 처리할 수 있도록 한다.

TYPE

SUBTYPE 

설명

text 

plain 

ASCII로 된 평문

richtext 

굵게, 밑줄등의 기본 포맷을 지원하는 텍스트

enriched 

richtext보다 좀 더 강력한 포맷을 지원하는 텍스트

Multipart 

Mixed 

독립된 여러 개의 part들이 하나의 메시지에 수납됨. 순서가 중요함

alternative

여러 가지 형태의 내용이 있으나 컨텐츠 내용의 의미가 모두 동일한 경우

Signed 

S/MIME용.

Message 

RFC822 

메시지 body가 RFC822 형식에 따름

Partial 

분할된 메시지임을 표시함

Image 

JPEG 

ISO 10918포맷

GIF 

CompuServe's 그래픽 인터체인지 포맷

Video 

MPEG 

ISO 11172포맷

Audio 

Basic 

8비트 인코딩 포맷

Application 

Octet-Stream 

이진파일

pkcs7-mime;

smime-type= signed-data; name=smime.p7m

S/MIME용. signed-data CMS형식 사용

pkcs7-mime;

smime-type=enveloped-data;

name=smime.p7m 

S/MIME용. enveloped-data CMS형식 사용

Content-Transfer-Encodinf

* 전송시 사용한 메시지 영역의 인코딩 방법을 지시한다.

TYPE

설명

7bit 

- ASCII 7비트의 데이터는 998문자이하의 텍스트 데이터로서 8번째 비트가 0으로 설정 되어 있으며 NULL문자는 없다. 그리고 <CR><LF>문자는 오직 End-of-Line문자로만 사용된다.

Binary 

- 이진부호 형식

Base64 

- 6비트 블록으로 분할한 후 8비트 ascii 코드로 매핑하는 방법

Content-ID

- 여러 개의 메시지 식별용

Content-Description 

- 메시지 바디 내용의 종류를 부가적으로 설명하는 문자열이다. 예를 들어 image형식의 바디에 대하여 "my photo"라고 설명할 수 있다.

 

- 아래의 그림 2는 mime방식을 사용한 메시지의 예입니다. 직관적이니 한 번 해석해 보시길 바랍니다.

 

그림 2) 메시지 예

 

 

2. base64

- 간단히 base64 인코딩 과정을 살펴보겠습니다.

만약 전송할 데이터가 "A,B,C"라면 이는 아스티 코드표로 "65,66,67"이고 이진수로 표기하면 다음과 같습니다.

01000001 01000010 01000011 이를 6비트씩 분할합니다.

010000 010100 001001 000011

이는 아래의 base64인코딩 표로 찾아보시면 각각 "QUJD"입니다. 즉 ABC라는 문자열을 전송할 때 BASE64인코딩을 거치면 "QUJD"이로 변환되는 것입니다.

 

그림 3) BASE64 인코딩표

 

- 마지막으로 SMIME를 설명하기 전에 한 가지 형식을 더 알고 넘어 가겠습니다. 그림 2의 content-TYPE을 보시면 이 메시지 컨텐트 형식이

"content-type:multipart/alternative "의 형식임을 알 수 있는데요. 이는 구분자의 역할을 하는 bondary="얼레리꼴레리" 를 구분으로 컨텐츠가 똑같다라는 의미이지만 multipart의 subtype에 mixed와 signed가 더 존재합니다. 이는 각각 서로 다른 컨텐츠들을 수납하거나 암호문을 전송할 때도 쓰입니다. 이는 다음 그림 4를 참고 하시길 바랍니다.

 

그림 4) multipart/mixed

 

 

 

출처 : http://sol9501.blog.me/70105624896