email.utils: 기타 유틸리티

소스 코드: Lib/email/utils.py


email.utils 모듈에서 제공되는 몇 가지 유용한 유틸리티가 있습니다:

email.utils.localtime(dt=None)

지역 시간을 어웨어 datetime 객체로 반환합니다. 인자 없이 호출되면, 현재 시각을 반환합니다. 그렇지 않으면 dt 인자가 datetime 인스턴스여야 하며, 시스템 시간대 데이터베이스에 따라 지역 시간대로 변환됩니다. dt가 나이브하면 (즉, dt.tzinfoNone이면), 지역 시간으로 간주합니다. 이 경우, isdst에 대한 양수나 0 값은 localtime 이 지정된 시간에 서머 타임(예를 들어, 일광 절약 시간)이 유효한지 그렇지 않은지를 처음에 가정하게 합니다. isdst에 대한 음수 값은 localtime 이 서머 타임이 지정된 시간에 유효한지를 결정하게 합니다.

버전 3.3에 추가.

email.utils.make_msgid(idstring=None, domain=None)

RFC 2822-준수 Message-ID 헤더에 적합한 문자열을 반환합니다. 선택적인 idstring이 주어지면, 메시지 id의 고유성을 강화하는 데 사용되는 문자열입니다. 선택적인 domain이 주어지면, msgid의 ‘@’ 다음 부분을 제공합니다. 기본값은 로컬 호스트 명입니다. 일반적으로 이 기본값을 재정의할 필요는 없지만, 여러 호스트에 걸쳐 일관된 도메인 이름을 사용하는 분산 시스템을 구성하는 경우와 같이 특정 경우에 유용할 수 있습니다.

버전 3.2에서 변경: domain 키워드가 추가되었습니다.

나머지 함수는 레거시 (Compat32) email API의 일부입니다. 이것들이 제공하는 구문 분석과 포매팅은 새 API의 헤더 구문 분석 장치가 자동으로 수행하므로, 새 API에서 이것들을 직접 사용할 필요는 없습니다.

email.utils.quote(str)

str에 있는 역 슬래시를 두 개의 역 슬래시로 대체하고, 큰따옴표는 역 슬래시-큰따옴표로 대체한 새 문자열을 반환합니다.

email.utils.unquote(str)

strunquote 된 버전인 새 문자열을 반환합니다. str가 큰따옴표로 끝나고 시작하면, 큰따옴표가 제거됩니다. 마찬가지로 str이 화살괄호(angle brackets)로 끝나고 시작하면, 제거됩니다.

email.utils.parseaddr(address, *, strict=True)

address(ToCc와 같은 주소를 포함하는 필드의 값이어야 합니다)를 realnameemail 주소 구성 요소로 구문 분석합니다. 구문 분석에 실패하지 않는 한 해당 정보의 튜플을 반환합니다. 실패하면 ('', '')의 2-튜플이 반환됩니다.

If strict is true, use a strict parser which rejects malformed inputs.

버전 3.9.20에서 변경: Add strict optional parameter and reject malformed inputs by default.

email.utils.formataddr(pair, charset='utf-8')

parseaddr()의 역, (realname, email_address) 형식의 2-튜플을 취해 ToCc 헤더에 적합한 문자열 값을 반환합니다. pair의 첫 번째 요소가 거짓이면, 두 번째 요소는 수정되지 않은 채 반환됩니다.

선택적 charsetrealname에 비 ASCII 문자가 포함되어있을 때 realnameRFC 2047 인코딩에 사용될 문자 집합입니다. str이나 Charset의 인스턴스가 될 수 있습니다. 기본값은 utf-8입니다.

버전 3.3에서 변경: charset 옵션이 추가되었습니다.

email.utils.getaddresses(fieldvalues, *, strict=True)

This method returns a list of 2-tuples of the form returned by parseaddr(). fieldvalues is a sequence of header field values as might be returned by Message.get_all.

If strict is true, use a strict parser which rejects malformed inputs.

Here’s a simple example that gets all the recipients of a message:

from email.utils import getaddresses

tos = msg.get_all('to', [])
ccs = msg.get_all('cc', [])
resent_tos = msg.get_all('resent-to', [])
resent_ccs = msg.get_all('resent-cc', [])
all_recipients = getaddresses(tos + ccs + resent_tos + resent_ccs)

버전 3.9.20에서 변경: Add strict optional parameter and reject malformed inputs by default.

email.utils.parsedate(date)

RFC 2822의 규칙에 따라 날짜를 구문 분석하려고 시도합니다. 그러나, 일부 메일러는 지정된 대로 이 형식을 따르지 않으므로 parsedate()는 이러한 경우에 올바르게 추측하려고 합니다. dateRFC 2822 날짜를 포함하는 문자열입니다 (가령 "Mon, 20 Nov 1995 19:12:08 -0500"). 날짜 구문 분석에 성공하면, parsedate()time.mktime()에 직접 전달할 수 있는 9-튜플을 반환합니다; 그렇지 않으면, None을 반환합니다. 결과 튜플의 인덱스 6, 7 및 8은 사용할 수 없음에 유의하십시오.

email.utils.parsedate_tz(date)

parsedate()와 같은 기능을 수행하지만, None이나 10-튜플을 반환합니다; 앞의 9개 요소는 time.mktime()에 직접 전달할 수 있는 튜플을 구성하고, 열 번째 요소는 UTC(그리니치 표준 시의 공식 용어)로부터의 날짜의 시간대 오프셋입니다 1. 입력 문자열에 시간대가 없으면, 반환되는 튜플의 마지막 요소는 0입니다, UTC를 나타냅니다. 결과 튜플의 인덱스 6, 7 및 8은 사용할 수 없음에 유의하십시오.

email.utils.parsedate_to_datetime(date)

format_datetime()의 역. parsedate()와 같은 기능을 수행하지만, 성공 시에 datetime을 반환합니다. 입력 date의 시간대가 -0000이면, datetime은 나이브 datetime이 되고, date가 RFC를 준수하면 UTC로 시간이 표시되지만, date가 온 메시지의 실제 소스 시간대는 표시되지 않습니다. 입력 date에 다른 유효한 시간대 오프셋이 있으면, datetime은 해당 timezone tzinfo가 있는 어웨어 datetime이 됩니다.

버전 3.3에 추가.

email.utils.mktime_tz(tuple)

parsedate_tz()에 의해 반환된 10-튜플을 UTC 타임스탬프(Epoch 이후 초)로 바꿉니다. 튜플의 시간대 항목이 None이면, 지역 시간으로 간주합니다.

email.utils.formatdate(timeval=None, localtime=False, usegmt=False)

RFC 2822에 따르는 날짜 문자열을 반환합니다, 예를 들어:

Fri, 09 Nov 2001 01:08:47 -0000

선택적 timeval이 주어지면 time.gmtime()time.localtime()이 받아들이는 부동 소수점 시간 값입니다, 그렇지 않으면 현재 시각이 사용됩니다.

선택적 localtime 은, True일 때, timeval을 해석하고, UTC 대신 일광 절약 시간을 적절히 고려하는 지역 시간대에 상대적인 날짜를 반환토록 하는 플래그입니다. 기본값은 UTC가 사용된다는 뜻인 False입니다.

선택적 usegmt는, True일 때, 날짜 문자열의 시간대를 숫자 -0000 대신 ASCII 문자열 GMT로 출력하도록 하는 플래그입니다. 일부 프로토콜(가령 HTTP)에 필요합니다. 이것은 localtimeFalse일 때만 적용됩니다. 기본값은 False입니다.

email.utils.format_datetime(dt, usegmt=False)

formatdate와 같지만, 입력이 datetime 인스턴스입니다. 나이브 datetime이면, “소스 시간대에 대한 정보가 없는 UTC”로 간주하며, 관습적으로 -0000이 시간대로 사용됩니다. 어웨어 datetime이면, 숫자 시간대 오프셋이 사용됩니다. 오프셋이 0인 어웨어 시간대면, usegmtTrue로 설정해서 GMT 문자열을 숫자 시간대 오프셋 대신 사용할 수 있습니다. 이것은 표준을 준수하는 HTTP date 헤더를 생성하는 방법을 제공합니다.

버전 3.3에 추가.

email.utils.decode_rfc2231(s)

RFC 2231에 따라 s 문자열을 디코드합니다.

email.utils.encode_rfc2231(s, charset=None, language=None)

RFC 2231에 따라 s 문자열을 인코드합니다. 선택적인 charsetlanguage가 주어지면, 사용할 문자 집합 이름과 언어 이름입니다. 둘 다 지정되지 않으면, s가 그대로 반환됩니다. charset이 주어졌지만, language가 지정되지 않으면, 문자열은 language에 대해 빈 문자열을 사용하여 인코딩됩니다.

email.utils.collapse_rfc2231_value(value, errors='replace', fallback_charset='us-ascii')

header 매개 변수가 RFC 2231로 인코딩되었을 때, Message.get_param은 문자 집합, 언어 및 값이 포함된 3-튜플을 반환할 수 있습니다. collapse_rfc2231_value()는 이것을 유니코드 문자열로 변환합니다. 선택적 errorsstrencode() 메서드의 errors 인자로 전달됩니다; 기본값은 'replace'입니다. 선택적 fallback_charsetRFC 2231 헤더에 있는 것이 파이썬에 알려지지 않았을 때 사용할 문자 집합을 지정합니다; 기본값은 'us-ascii'입니다.

편의상, collapse_rfc2231_value()에 전달된 value가 튜플이 아니면, 문자열이어야 하고 unquote 되어 반환됩니다.

email.utils.decode_params(params)

RFC 2231에 따라 매개 변수 리스트를 디코드합니다. params(content-type, string-value) 형식의 요소를 포함하는 2-튜플의 시퀀스입니다.

각주

1

시간대 오프셋의 부호는 같은 시간대에 대한 time.timezone 변수의 부호와 반대임에 유의하십시오; 이 모듈이 RFC 2822를 따르지만, 후자의 변수는 POSIX 표준을 따릅니다.