email.contentmanager
: Managing MIME Content¶
소스 코드: Lib/email/contentmanager.py
Added in version 3.6: [1]
- class email.contentmanager.ContentManager¶
콘텐츠 관리자를 위한 베이스 클래스.
get_content
와set_content
디스패치 메서드뿐만 아니라 MIME 콘텐츠와 다른 표현 간의 변환기를 등록하는 표준 등록소 메커니즘을 제공합니다.- get_content(msg, *args, **kw)¶
msg의
mimetype
을 기반으로 처리기 함수를 찾고 (다음 단락을 참조하십시오), 모든 인자를 전달하여 그것을 호출하고, 이 호출의 결과를 반환합니다. 처리기가 msg에서 페이 로드를 추출하고 추출된 데이터에 대한 정보를 인코딩하는 객체를 반환할 것으로 기대합니다.처리기를 찾으려면, 등록소에서 다음 키를 찾는데, 처음 발견되는 것에서 멈춥니다:
전체 MIME 유형을 나타내는 문자열 (
maintype/subtype
)maintype
을 나타내는 문자열빈 문자열
이러한 키 중 아무것도 이러한 처리기를 생성하지 않으면, 전체 MIME 유형에 대해
KeyError
를 발생시킵니다.
- set_content(msg, obj, *args, **kw)¶
maintype
이multipart
이면,TypeError
를 발생시킵니다; 그렇지 않으면 obj의 형을 기반으로 처리기 함수를 찾고 (다음 단락을 참조하십시오), msg에서clear_content()
를 호출한 다음, 모든 인자를 전달해서 처리기 함수를 호출합니다. 처리기가 obj를 msg로 변환하고 저장할 것으로 기대하는데, 저장된 데이터를 해석하는 데 필요한 정보를 인코딩하기 위해 다양한 MIME 헤더를 추가하는 등 msg에 다른 변경을 가할 수 있습니다.처리기를 찾으려면, obj의 형을 얻고 (
typ = type(obj)
), 등록소에서 다음 키를 찾는데 처음 발견되는 것에서 멈춥니다:형 자체 (
typ
)형의 완전히 정규화된 이름 (
typ.__module__ + '.' + typ.__qualname__
).the type’s
qualname
(typ.__qualname__
)the type’s
name
(typ.__name__
).
If none of the above match, repeat all of the checks above for each of the types in the MRO (
typ.__mro__
). Finally, if no other key yields a handler, check for a handler for the keyNone
. If there is no handler forNone
, raise aKeyError
for the fully qualified name of the type.MIME-Version 헤더가 없으면 추가합니다 (
MIMEPart
를 참조하십시오).
- add_get_handler(key, handler)¶
함수 handler를 key의 처리기로 기록합니다. 가능한 key 값은
get_content()
를 참조하십시오.
- add_set_handler(typekey, handler)¶
typekey와 일치하는 형의 객체가
set_content()
에 전달될 때 호출할 함수로 handler를 기록합니다. 가능한 typekey 값은set_content()
를 참조하십시오.
콘텐츠 관리자 인스턴스¶
현재 email 패키지는 하나의 구상 콘텐츠 관리자 raw_data_manager
만 제공하지만, 향후에는 더 추가될 수 있습니다. raw_data_manager
는 EmailPolicy
와 그 파생물에 의해 제공되는 content_manager
입니다.
- email.contentmanager.raw_data_manager¶
이 콘텐츠 관리자는
Message
자체에서 제공하는 것 외에는 최소 인터페이스 만 제공합니다: 텍스트, 날 바이트열 및Message
객체만 다룹니다. 그런데도 기본 API와 비교할 때 상당한 이점을 제공합니다: 텍스트 파트에 대한get_content
는 응용 프로그램이 수동으로 디코딩할 필요 없이 유니코드 문자열을 반환하고,set_content
는 파트에 추가된 헤더를 제어하고 콘텐츠 전송 인코딩을 제어하기 위한 다양한 옵션을 제공하고, 다양한add_
메서드를 사용할 수 있도록 해서, 멀티 파트 메시지 작성을 단순화합니다.- email.contentmanager.get_content(msg, errors='replace')¶
파트의 페이 로드를 문자열(
text
파트의 경우),EmailMessage
객체 (message/rfc822
파트의 경우) 또는bytes
객체 (다른 모든 비 멀티 파트 유형의 경우)로 반환합니다.multipart
에서 호출되면KeyError
를 발생시킵니다. 파트가text
파트이고 errors가 지정되면, 페이 로드를 유니코드로 디코딩할 때 에러 처리기로 사용합니다. 기본 에러 처리기는replace
입니다.
- email.contentmanager.set_content(msg, <'str'>, subtype="plain", charset='utf-8', cte=None, disposition=None, filename=None, cid=None, params=None, headers=None)¶
- email.contentmanager.set_content(msg, <'bytes'>, maintype, subtype, cte="base64", disposition=None, filename=None, cid=None, params=None, headers=None)
- email.contentmanager.set_content(msg, <'EmailMessage'>, cte=None, disposition=None, filename=None, cid=None, params=None, headers=None)
msg에 헤더와 페이 로드를 추가합니다:
maintype/subtype
값으로 Content-Type 헤더를 추가합니다.str
의 경우, MIMEmaintype
을text
로 설정하고, 서브 유형은 지정되었으면 subtype으로 설정하고, 지정되지 않았으면plain
으로 설정합니다.bytes
의 경우, 지정된 maintype과 subtype을 사용하거나, 지정되지 않았으면TypeError
를 발생시킵니다.EmailMessage
객체의 경우, 메인 유형을message
로 설정하고, 서브 유형은 지정되었으면 subtype으로 설정하고, 지정되지 않았으면rfc822
로 설정합니다. subtype이partial
이면 에러를 발생시킵니다 (bytes
객체를 사용하여message/partial
파트를 구성해야 합니다).
charset이 제공되면 (
str
에만 유효합니다), 지정된 문자 집합을 사용하여 문자열을 바이트열로 인코딩합니다. 기본값은utf-8
입니다. 지정된 charset이 표준 MIME 문자 집합 이름의 알려진 별칭이면, 표준 문자 집합을 대신 사용합니다.cte가 설정되면, 지정된 콘텐츠 전송 인코딩을 사용하여 페이 로드를 인코딩하고, Content-Transfer-Encoding 헤더를 해당 값으로 설정합니다. cte의 가능한 값은
quoted-printable
,base64
,7bit
,8bit
및binary
입니다. 지정된 인코딩으로 입력을 인코딩할 수 없으면 (예를 들어, 비 ASCII 값을 포함하는 입력에 대해 cte를7bit
로 지정합니다),ValueError
를 발생시킵니다.str
객체의 경우, cte가 설정되지 않으면 휴리스틱을 사용하여 가장 간결한 인코딩을 결정합니다.EmailMessage
의 경우, RFC 2046에 따라, subtyperfc822
에 대해quoted-printable
이나base64
의 cte가 요청되거나, subtypeexternal-body
에 대해7bit
이외의 cte에 대해 에러를 발생시킵니다.message/rfc822
의 경우, cte가 지정되지 않으면8bit
를 사용합니다. subtype의 다른 모든 값에는7bit
를 사용합니다.
참고
binary
의 cte는 실제로 아직 제대로 작동하지 않습니다.set_content
에 의해 수정된EmailMessage
객체는 올바르지만,BytesGenerator
는 이것을 올바르게 직렬화하지 않습니다.disposition이 설정되면, 이를 Content-Disposition 헤더의 값으로 사용합니다. 지정되지 않고 filename이 지정되면, 값이
attachment
인 헤더를 추가합니다. disposition이 지정되지 않고 filename도 지정되지 않으면, 헤더를 추가하지 않습니다. disposition에 유효한 값은attachment
와inline
뿐 입니다.filename이 지정되면, 이를 Content-Disposition 헤더의
filename
파라미터의 값으로 사용합니다.cid가 지정되면, cid를 값으로 사용하여 Content-ID 헤더를 추가합니다.
params가 지정되면, 그것의
items
메서드를 이터레이트하고 결과(key, value)
쌍을 사용하여 Content-Type 헤더에 추가 파라미터를 설정합니다.headers가 지정되고
headername: headervalue
형식의 문자열 리스트나header
객체 (name
어트리뷰트를 가진 것으로 문자열과 구별됩니다) 리스트면, 헤더를 msg에 추가합니다.
각주