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 で非推奨、バージョン 3.14 で削除: isdst パラメータ。
- email.utils.make_msgid(idstring=None, domain=None)¶
RFC 2822 に準拠した Message-ID ヘッダに適した文字列を返します。 オプション引数 idstring は、メッセージ ID の一意性を高めるために使う文字列です。 オプション引数 domain は、メッセージ ID の「@」より後の部分を指定します。 デフォルトはローカルのホスト名です。 通常、このデフォルトを変更する必要はありませんが、複数のホストで共通のドメイン名を使う分散システムを構築する場合などに役立つことがあります。
バージョン 3.2 で変更: domain キーワードが追加されました。
以下の関数は従来の (Compat32) email API の一部です。
新しい API ではヘッダの解析機構がこれらの解析や書式化を自動的に行うため、直接使う必要はありません。
- email.utils.quote(str)¶
文字列 str 内のバックスラッシュをバックスラッシュ2つに置換した新しい文字列を返します。また、ダブルクォートはバックスラッシュ + ダブルクォートに置換されます。
- email.utils.unquote(str)¶
文字列 str の クォートを外した 新しい文字列を返します。str の先頭と末尾がダブルクォートだった場合、それらは取り除かれます。同様に str の先頭と末尾が角ブラケット (<、>) だった場合もそれらは取り除かれます。
- email.utils.parseaddr(address, *, strict=True)¶
アドレスを解析して、構成要素である 実名 と 電子メールアドレス に分けます。 渡すアドレスは To や Cc など、アドレスを含むフィールドの値です。 解析に成功した場合はこれらの情報をタプルで返し、失敗した場合は 2 要素タプル
('', '')を返します。strict が真の場合、不正な入力を拒否する厳格なパーザを使います。
バージョン 3.13 で変更: オプションのパラメータ strict が追加され、デフォルトで不正な入力を拒否するようになりました。
- email.utils.formataddr(pair, charset='utf-8')¶
parseaddr()の逆の処理を行います。(realname, email_address)形式の 2 要素タプルを受け取り、To や Cc ヘッダに適した文字列の値を返します。 pair の最初の要素が偽の場合、2 番目の要素をそのまま返します。任意の charset は、
realnameが非 ASCII 文字を含んでいる場合にその RFC 2047 エンコーディングに使われる文字集合です。strかCharsetのインスタンスで、デフォルトはutf-8です。バージョン 3.3 で変更: charset オプションが追加されました。
- email.utils.getaddresses(fieldvalues, *, strict=True)¶
parseaddr()が返す形式の 2 要素タプルからなるリストを返します。 fieldvalues は、Message.get_all()が返すようなヘッダフィールド値のシーケンスです。strict が真の場合、不正な入力を拒否する厳格なパーザを使います。
メッセージのすべての受信者を取得する簡単な例を示します。
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()に直接渡せるタプルを構成し、10 番目の要素は日付のタイムゾーンの UTC (グリニッジ標準時の正式名称) からのオフセットです [1]。 入力文字列にタイムゾーンがなければ、返されるタプルの最後の要素は UTC を表す0です。 返されたタプルのインデックス 6、7、8 の要素は使用できないことに注意してください。
- email.utils.parsedate_to_datetime(date)¶
format_datetime()の逆の処理を行います。parsedate()と同じ処理を行いますが、成功するとdatetimeを返します。 date に 23 を超える時や、-24 時間から 24 時間の範囲にないタイムゾーンオフセットなどの無効な値が含まれる場合はValueErrorを送出します。 入力の日付のタイムゾーンが-0000の場合、datetimeは naive になります。 その日付が RFC に準拠していれば UTC の時刻を表しますが、元のメッセージの実際のタイムゾーンを示す情報はありません。 入力の日付にそれ以外の有効なタイムゾーンオフセットがある場合、datetimeは aware になり、対応するtzinfo属性はtimezoneオブジェクトになります。Added in version 3.3.
- email.utils.mktime_tz(tuple)¶
parsedate_tz()が返す 10 要素のタプルを UTC のタイムスタンプ (エポックからの秒数) に変換します。与えられた時間帯がNoneである場合、時間帯として現地時間 (localtime) が仮定されます。
- 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 ではなく現地のタイムゾーンで日付を返します。 デフォルトはFalseで、UTC を使います。オプション引数 usegmt が
Trueの場合、日付文字列のタイムゾーンを数値の-0000ではなく ASCII 文字列GMTで出力します。 これは HTTP などの一部のプロトコルで必要です。 localtime がFalseの場合にのみ適用されます。 デフォルトはFalseです。
- email.utils.format_datetime(dt, usegmt=False)¶
formatdate()と似ていますが、入力はdatetimeインスタンスです。 naive な datetime の場合は「元のタイムゾーンの情報がない UTC」とみなし、慣例に従ってタイムゾーンに-0000を使います。 aware なdatetimeの場合は数値のタイムゾーンオフセットを使います。 aware でオフセットがゼロの場合は usegmt をTrueに設定でき、その場合は数値のタイムゾーンオフセットの代わりに文字列GMTを使います。 これにより標準に準拠した HTTP の日付ヘッダを生成できます。Added in version 3.3.
- email.utils.encode_rfc2231(s, charset=None, language=None)¶
RFC 2231 に従って文字列 s をエンコードします。 オプション引数 charset と language は、使う文字セット名と言語名です。 どちらも指定しなければ s をそのまま返します。 charset を指定して language を指定しない場合は、language に空文字列を使ってエンコードします。
- email.utils.collapse_rfc2231_value(value, errors='replace', fallback_charset='us-ascii')¶
When a header parameter is encoded in RFC 2231 format,
Message.get_param()may return a 3-tuple containing the character set, language, and value.collapse_rfc2231_value()turns this into a string. Optional errors is passed to the errors argument ofstr'sencode()method; it defaults to'replace'. Optional fallback_charset specifies the character set to use if the one in the RFC 2231 header is not known by Python; it defaults to'us-ascii'.便宜上、
collapse_rfc2231_value()に渡された引数 value がタプルでない場合には、これは文字列でなければなりません。その場合にはクォートを除いた文字列を返します。
- email.utils.decode_params(params)¶
RFC 2231 に従ってパラメータのリストをデコードします。 params は
(content-type, string-value)形式の 2 要素タプルからなるシーケンスです。
脚注