# `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`

  A subclass of `MIMENonMultipart`, the `MIMEApplication` class is used to represent MIME message objects of major type application. _data contains the bytes for the raw application data. Optional _subtype specifies the MIME subtype and defaults to 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`

  A subclass of `MIMENonMultipart`, the `MIMEAudio` class is used to create MIME message objects of major type audio. _audiodata contains the bytes for the raw audio data. If this data can be decoded as au, wav, aiff, or aifc, then the subtype will be automatically included in the Content-Type header. Otherwise you can explicitly specify the audio subtype via the _subtype argument. If the minor type could not be guessed and _subtype was not given, then `TypeError` is raised.

  선택적 _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`

  A subclass of `MIMENonMultipart`, the `MIMEImage` class is used to create MIME message objects of major type image. _imagedata contains the bytes for the raw image data. If this data type can be detected (jpeg, png, gif, tiff, rgb, pbm, pgm, ppm, rast, xbm, bmp, webp, and exr attempted), then the subtype will be automatically included in the Content-Type header. Otherwise you can explicitly specify the image subtype via the _subtype argument. If the minor type could not be guessed and _subtype was not given, then `TypeError` is raised.

  선택적 _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 키워드 전용 매개 변수를 추가했습니다.