Python

email.utils: 기타 유틸리티

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


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

email.utils.localtime(dt=None)

로컬 시간을 aware datetime 객체로 반환합니다. 인자 없이 호출하면 현재 시간을 반환합니다. 그렇지 않으면 dt 인자는 datetime 인스턴스여야 하며, 시스템 시간대 데이터베이스에 따라 로컬 시간대로 변환됩니다. dt 가 naive(즉, dt.tzinfo 가 None)인 경우 로컬 시간인 것으로 간주합니다.

Added in version 3.3.

버전 3.12부터 사용 지원 중단(deprecated), 버전 3.14에서 제거됨: isdst 매개 변수.

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)

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

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

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

strict 가 참(True)이면, 잘못된 형식을 가진 입력을 거부하는 엄격한 파서(parser)를 사용합니다.

버전 3.13에서 변경: strict 선택적 매개변수를 추가하고, 기본적으로 잘못된 형식을 가진 입력을 거부합니다.

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

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

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

strict 가 True(기본값)인 경우, 이메일 주소에 허용되지 않는 CR 또는 LF를 포함하는 입력에 대해 ValueError 를 발생시킵니다. 엄격하지 않은 입력을 허용하려면 strict 를 False 로 설정하십시오.

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

버전 3.16에서 변경: strict 매개변수가 추가되었습니다.

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

이 함수는 parseaddr() 에서 반환되는 형식의 2-튜플 리스트를 반환합니다. fieldvalues 는 Message.get_all() 에 의해 반환될 수 있는 헤더 필드 값의 시퀀스입니다.

strict 가 참(True)이면, 잘못된 형식을 가진 입력을 거부하는 엄격한 파서(parser)를 사용합니다.

메시지의 모든 수신자를 가져오는 간단한 예제입니다:

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.13에서 변경: strict 선택적 매개변수를 추가하고, 기본적으로 잘못된 형식을 가진 입력을 거부합니다.

email.utils.parsedate(date)

RFC 2822 Section 3.3 의 규칙에 따라 날짜를 구문 분석하려고 시도합니다. 그러나 일부 메일러는 명시된 형식을 따르지 않으므로, parsedate() 는 이러한 경우에 올바르게 추측을 시도합니다. date 는 "Mon, 20 Nov 1995 19:12:08 -0500" 과 같은 RFC 2822 날짜를 포함하는 문자열입니다. 날짜 구문 분석에 성공하면 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 에 23을 초과하는 시간이나 -24에서 24 사이가 아닌 시간대 오프셋 등 잘못된 값이 포함된 경우 ValueError 가 발생합니다. 입력 날짜의 시간대가 -0000 이면 datetime 은 나이브(naive) datetime 이 되며, 날짜가 RFC를 준수하는 경우 UTC 시간으로 표시되지만 해당 날짜가 포함된 메시지의 실제 소스 시간대는 표시되지 않습니다. 입력 날짜가 다른 유효한 시간대 오프셋을 가지는 경우, datetime 은 해당 tzinfo 속성이 timezone 객체인 어웨어(aware) datetime 이 됩니다.

Added in version 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 등)에서 필요합니다. 이 기능은 localtime 이 False 일 때만 적용됩니다. 기본값은 False 입니다.

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

formatdate() 와 유사하지만 입력이 datetime 인스턴스인 경우에 사용됩니다. 나이브(naive) datetime인 경우 “소스 시간대 정보가 없는 UTC”로 간주하며, 시간대로는 관례적인 -0000 이 사용됩니다. 어웨어(aware) datetime 인 경우, 숫자 시간대 오프셋이 사용됩니다. 오프셋이 0인 어웨어 시간대인 경우 usegmt 를 True 로 설정할 수 있으며, 이 경우 숫자 시간대 오프셋 대신 GMT 문자열이 사용됩니다. 이는 표준을 준수하는 HTTP 날짜 헤더를 생성하는 방법을 제공합니다.

Added in version 3.3.

email.utils.decode_rfc2231(s)

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

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

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

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

헤더 매개변수가 RFC 2231 형식으로 인코딩된 경우, Message.get_param() 가 문자 집합, 언어, 값을 포함하는 3-튜플을 반환할 수 있습니다. collapse_rfc2231_value() 는 이를 문자열로 변환합니다. 선택적인 errors 는 str 의 encode() 메서드의 errors 인자로 전달되며, 기본값은 'replace' 입니다. 선택적인 fallback_charset 은 RFC 2231 헤더의 문자 집합을 Python이 인식하지 못할 경우 사용할 문자 집합을 지정하며, 기본값은 'us-ascii' 입니다.

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

email.utils.decode_params(params)

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

각주

분실물 보관소