# `email.mime`: 처음부터 이메일과 MIME 객체 만들기

소스 코드: Lib/email/mime/

이 모듈은 레거시 (`Compat32`) 이메일 API의 일부입니다. 새로운 API에서는 기능이 `contentmanager`로 부분적으로 대체되지만, 특정 응용 프로그램에서는 이 클래스들이 레거시 코드가 아닌 곳에서도 여전히 유용할 수 있습니다.

일반적으로, 파일이나 일부 텍스트를, 텍스트를 구문 분석하고 루트 메시지 객체를 반환하는 구문 분석기에 전달하여 메시지 객체 구조를 얻습니다. 그러나 처음부터 완전한 메시지 구조를 만들거나, 개별 `Message` 객체를 직접 만들 수도 있습니다. 실제로, 기존 구조를 가져와서 새로운 `Message` 객체를 추가하거나 이동시킬 수도 있습니다. 이렇게 하면 MIME 메시지를 잘게 자르고 재배치하는 매우 편리한 인터페이스가 만들어집니다.

`Message` 인스턴스를 만들고 첨부 파일과 모든 적절한 헤더를 수동으로 추가하여 새 객체 구조를 만들 수 있습니다. 그러나 MIME 메시지의 경우, `email` 패키지는 작업을 쉽게 하기 위해 편리한 서브 클래스를 제공합니다.

클래스는 다음과 같습니다:

class email.mime.base.MIMEBase(_maintype, _subtype, *, policy=compat32, **_params)

  모듈: `email.mime.base`

  이것은 `Message`의 모든 MIME 특정 서브 클래스의 베이스 클래스입니다. 일반적으로, 할 수는 있지만, `MIMEBase`의 인스턴스를 만들지는 않습니다. `MIMEBase`는 주로 더 구체적인 MIME 인식 서브 클래스를 위한 편리한 베이스 클래스로 제공됩니다.

  _maintype은 Content-Type 주 유형(예를 들어 text나 image)이고, _subtype은 Content-Type 부 유형(예를 들어 plain이나 gif)입니다. _params는 매개 변수 키/값 딕셔너리이며 `Message.add_header`로 직접 전달됩니다.

  policy가 지정되면 (기본값은 `compat32` 정책입니다), `Message`로 전달됩니다.

  `MIMEBase` 클래스는 항상 (_maintype, _subtype 및 _params에 기반하는) Content-Type 헤더와 (항상 `1.0`으로 설정되는) MIME-Version 헤더를 추가합니다.

  버전 3.6에서 변경: policy 키워드 전용 매개 변수를 추가했습니다.

class email.mime.nonmultipart.MIMENonMultipart

  모듈: `email.mime.nonmultipart`

  `MIMEBase`의 서브 클래스, multipart 가 아닌 MIME 메시지의 중간 베이스 클래스입니다. 이 클래스의 기본 목적은 multipart 메시지에만 적합한 `attach()` 메서드 사용을 방지하는 것입니다. `attach()`가 호출되면 `MultipartConversionError` 예외가 발생합니다.

class email.mime.multipart.MIMEMultipart(_subtype='mixed', boundary=None, _subparts=None, *, policy=compat32, **_params)

  모듈: `email.mime.multipart`

  `MIMEBase`의 서브 클래스, multipart 인 MIME 메시지의 중간 베이스 클래스입니다. 선택적 _subtype의 기본값은 mixed이지만, 메시지의 부 유형을 지정하는 데 사용할 수 있습니다. multipart/_subtype의 Content-Type 헤더가 메시지 객체에 추가됩니다. MIME-Version 헤더도 추가됩니다.

  선택적 boundary는 멀티 파트 경계 문자열입니다. `None`(기본값)이면, 경계는 필요할 때 (예를 들어 메시지가 직렬화될 때) 계산됩니다.

  _subparts는 페이 로드의 초기 서브 파트 시퀀스입니다. 이 시퀀스를 리스트로 변환할 수 있어야 합니다. `Message.attach` 메서드를 사용하여 항상 메시지에 새 서브 파트를 첨부할 수 있습니다.

  선택적 policy 인자의 기본값은 `compat32`입니다.

  Content-Type 헤더에 대한 추가 매개 변수는 키워드 인자에서 취하거나, 키워드 딕셔너리인 _params 인자로 전달됩니다.

  버전 3.6에서 변경: policy 키워드 전용 매개 변수를 추가했습니다.

class email.mime.application.MIMEApplication(_data, _subtype='octet-stream', _encoder=email.encoders.encode_base64, *, policy=compat32, **_params)

  모듈: `email.mime.application`

  `MIMENonMultipart` 의 서브 클래스, `MIMEApplication` 클래스는 주 유형 application의 MIME 메시지 객체를 나타내는 데 사용됩니다. _data는 원시 애플리케이션 데이터의 바이트 열을 포함합니다. 선택적 _subtype은 MIME 부 유형을 지정하고 기본값은 octet-stream입니다.

  선택적 _encoder는 전송을 위해 데이터의 실제 인코딩을 수행할 콜러블(즉, 함수)입니다. 이 콜러블은 `MIMEApplication` 인스턴스인 하나의 인자를 취합니다. 페이 로드를 인코딩된 형식으로 변경하려면 `get_payload()`와 `set_payload()`를 사용해야 합니다. 또한, 필요에 따라 Content-Transfer-Encoding이나 기타 헤더를 메시지 객체에 추가해야 합니다. 기본 인코딩은 base64입니다. 내장 인코더의 목록은 `email.encoders` 모듈을 참조하십시오.

  선택적 policy 인자의 기본값은 `compat32`입니다.

  _params는 베이스 클래스 생성자로 바로 전달됩니다.

  버전 3.6에서 변경: policy 키워드 전용 매개 변수를 추가했습니다.

class email.mime.audio.MIMEAudio(_audiodata, _subtype=None, _encoder=email.encoders.encode_base64, *, policy=compat32, **_params)

  모듈: `email.mime.audio`

  `MIMENonMultipart` 의 서브 클래스, `MIMEAudio` 클래스는 주 유형 audio의 MIME 메시지 객체를 만드는 데 사용됩니다. _audiodata는 원시 오디오 데이터의 바이트 열을 포함합니다. 이 데이터를 au, wav, aiff 또는 aifc로 디코딩 할 수 있으면, 부 유형이 Content-Type 헤더에 자동으로 포함됩니다. 그렇지 않으면 _subtype 인자를 통해 audio 부 유형을 명시적으로 지정할 수 있습니다. 부 유형을 추측할 수 없고 _subtype이 제공되지 않으면, `TypeError`가 발생합니다.

  선택적 _encoder는 전송을 위해 오디오 데이터의 실제 인코딩을 수행할 콜러블(즉, 함수)입니다. 이 콜러블은 `MIMEAudio` 인스턴스인 하나의 인자를 취합니다. 페이 로드를 인코딩된 형식으로 변경하려면 `get_payload()`와 `set_payload()`를 사용해야 합니다. 또한 필요에 따라 Content-Transfer-Encoding이나 기타 헤더를 메시지 객체에 추가해야 합니다. 기본 인코딩은 base64입니다. 내장 인코더의 목록은 `email.encoders` 모듈을 참조하십시오.

  선택적 policy 인자의 기본값은 `compat32`입니다.

  _params는 베이스 클래스 생성자로 바로 전달됩니다.

  버전 3.6에서 변경: policy 키워드 전용 매개 변수를 추가했습니다.

class email.mime.image.MIMEImage(_imagedata, _subtype=None, _encoder=email.encoders.encode_base64, *, policy=compat32, **_params)

  모듈: `email.mime.image`

  `MIMENonMultipart` 의 서브 클래스, `MIMEImage` 클래스는 주 유형 image의 MIME 메시지 객체를 만드는 데 사용됩니다. _imagedata는 원시 이미지 데이터의 바이트 열을 포함합니다. 이 데이터 형이 감지된다면 (jpeg, png, gif, tiff, rgb, pbm, pgm, ppm, rast, xbm, bmp, webp 과 exr 을 시도합니다), 부 유형이 Content-Type 헤더에 자동으로 포함됩니다. 그렇지 않으면 _subtype 인자를 통해 image 부 유형을 명시적으로 지정할 수 있습니다. 부 유형을 추측할 수 없고 _subtype이 제공되지 않으면, `TypeError`가 발생합니다.

  선택적 _encoder는 전송을 위해 이미지 데이터의 실제 인코딩을 수행할 콜러블(즉, 함수)입니다. 이 콜러블은 `MIMEImage` 인스턴스인 하나의 인자를 취합니다. 페이 로드를 인코딩된 형식으로 변경하려면 `get_payload()`와 `set_payload()`를 사용해야 합니다. 또한 필요에 따라 Content-Transfer-Encoding이나 기타 헤더를 메시지 객체에 추가해야 합니다. 기본 인코딩은 base64입니다. 내장 인코더의 목록은 `email.encoders` 모듈을 참조하십시오.

  선택적 policy 인자의 기본값은 `compat32`입니다.

  _params는 `MIMEBase` 생성자로 바로 전달됩니다.

  버전 3.6에서 변경: policy 키워드 전용 매개 변수를 추가했습니다.

class email.mime.message.MIMEMessage(_msg, _subtype='rfc822', *, policy=compat32)

  모듈: `email.mime.message`

  `MIMENonMultipart` 의 서브 클래스, `MIMEMessage` 클래스는 주 유형 message의 MIME 객체를 만드는 데 사용됩니다. _msg는 페이 로드로 사용되며, `Message` 클래스(또는 그 서브 클래스)의 인스턴스여야 합니다, 그렇지 않으면 `TypeError`가 발생합니다.

  선택적 _subtype은 메시지의 부 유형을 설정합니다; 기본값은 rfc822입니다.

  선택적 policy 인자의 기본값은 `compat32`입니다.

  버전 3.6에서 변경: policy 키워드 전용 매개 변수를 추가했습니다.

class email.mime.text.MIMEText(_text, _subtype='plain', _charset=None, *, policy=compat32)

  모듈: `email.mime.text`

  `MIMENonMultipart` 의 서브 클래스, `MIMEText` 클래스는 주 유형 text의 MIME 객체를 만드는 데 사용됩니다. _text는 페이 로드의 문자열입니다. _subtype은 부 유형이며 기본값은 plain입니다. _charset은 텍스트의 문자 집합이며 `MIMENonMultipart` 생성자에 인자로 전달됩니다; 기본값은 문자열에 `ascii` 코드 포인트만 포함되어 있으면 `us-ascii`이고, 그렇지 않으면 `utf-8`입니다. _charset 매개 변수는 문자열이나 `Charset` 인스턴스를 받아들입니다.

  _charset 인자가 명시적으로 `None`으로 설정되어 있지 않은 한, 만들어진 MIMEText 객체에는 `charset` 매개 변수가 있는 Content-Type 헤더와 Content-Transfer-Encoding 헤더가 모두 있습니다. 이는 charset이 `set_payload` 명령으로 전달되더라도, 후속 `set_payload` 호출이 인코딩된 페이 로드를 만들지 않음을 의미합니다. `Content-Transfer-Encoding` 헤더를 삭제하여 이 동작을 “재설정”할 수 있으며, 그 후에 `set_payload` 호출은 자동으로 새 페이 로드를 인코딩합니다 (그리고 새 Content-Transfer-Encoding 헤더를 추가합니다).

  선택적 policy 인자의 기본값은 `compat32`입니다.

  버전 3.5에서 변경: _charset은 `Charset` 인스턴스도 받아들입니다.

  버전 3.6에서 변경: policy 키워드 전용 매개 변수를 추가했습니다.