:管理MIME内容 – 电子邮件和MIME处理包(Python教程)(参考资料)
email.contentmanager
:管理MIME内容
源代码: Lib / email / contentmanager.py
版本3.6中新增: [1]
- class
email.contentmanager.
ContentManager
-
内容管理员的基类。提供标准的注册表机制,以便在MIME内容和其他表示之间注册转换器,以及
get_content
和set_content
调度方法.get_content
(msg, *args, **kw)-
根据
mimetype
的msg查看处理函数(参见nextparagraph),调用它,传递所有参数,然后返回调用的结果。期望处理程序将从msg中提取payload并返回一个对象,该对象对提取的数据进行编码.要找到处理程序,请在注册表中查找以下键,然后停止第一个发现:
- 表示完整MIME类型的字符串(
maintype/subtype
) - 表示
maintype
- 空字符串的字符串
如果这些键都没有产生处理程序,请为完整的MIME类型提高
KeyError
。 - 表示完整MIME类型的字符串(
set_content
(msg, obj, *args, **kw)-
如果
maintype
是multipart
,举起TypeError
;其他根据obj的类型获取处理函数(见下一段),在clear_content()
上调用msg,并调用处理函数,传递所有参数。期望是处理程序将转换并存储obj到msg,可能对进行其他更改msg同时,例如添加各种MIME标头来编码解释storeddata所需的信息.要找到处理程序,获取obj的类型(
typ = type(obj)
),并查看注册表中的以下键,以第一个停止:- 类型本身(
typ
) - 类型的完全限定名称(
typ.__module__ + "." +typ.__qualname__
). - 类型的名字(
typ.__qualname__
) - 类型的名称(
typ.__name__
).
如果以上都不匹配,重复上面对 MRO 中每种类型的所有检查(
typ.__mro__
)。最后,如果没有其他keyyields处理程序,请检查键的处理程序None
。如果None
,举起一个KeyError
对于该类型的完全限定名称.另外加一个MIME-Version标题如果不存在(参见
MIMEPart
). - 类型本身(
add_get_handler
(key, handler)-
记录功能handler作为key。对于key,见
get_content()
.
add_set_handler
(typekey, handler)-
记录handler当一个类型匹配的对象typekey被传递给
set_content()
时调用的函数。对于typekey的可能值,请参阅set_content()
.
内容管理器实例
目前电子邮件包只提供一个具体的内容管理器,raw_data_manager
,虽然将来可能会添加更多.raw_data_manager
是content_manager
由EmailPolicy
提供它的衍生物
email.contentmanager.
raw_data_manager
-
这个内容管理器只提供了
Message
本身提供的最小接口:它只处理text,rawbyte字符串和Message
对象。然而,与基本API相比,它提供了显着的优势:get_content
文本部分将返回一个unicode字符串而不需要手动解码它,set_content
提供了一组丰富的选项来控制添加到部件中的标题并控制内容传输,并且它可以使用各种add_
方法,简化多部分信息的创建.email.contentmanager.
get_content
(msg, errors=”replace”)-
将部分的有效负载返回为字符串(对于
text
部分),一个EmailMessage
物体(message/rfc822
部分),或bytes
对象(适用于所有其他非多部分类型)。RaiseaKeyError
如果叫multipart
。如果该部分是text
部分和errors指定,在将有效负载解码为unicode时将其用作错误处理程序。默认错误处理程序是replace
.
email.contentmanager.
set_content
(msg, <“str”>, subtype=”plain”, charset=”utf-8″ cte=None, disposition=None, filename=None, cindex-0″>RFC 2046 ,如果cte对quoted-printable
要么base64
要求subtyperfc822
,以及任何cte以外7bit
为subtypeexternal-body
。对于message/rfc822
, 使用8bit
如果cte未指定。FALLl其他值subtype, 使用7bit
.注意
一个 cte对
binary
实际上还没有正常工作.EmailMessage
对象由set_content
是正确的,但BytesGenerator
没有正确地将它正确化.如果disposition设置,用它作为Content-Disposition头。如果没有指定,和filename指定,添加值为
attachment
的标题。如果没有指定disposition,也没有指定filename,请不要添加标题。disposition的唯一有效值是attachment
和inline
.如果filename指定,使用它作为
filename
标题的Content-Disposition参数的值如果指定cid,添加一个Content-ID header以cid作为其值
如果指定params,则重复其
items
方法并使用结果(key, value)
对在Content-Type header上设置附加参数如果headers被指定并且是一个表格的字符串列表
headername: headervalue
或header
对象(通过name
属性),将标题添加到msg.
脚注
[1] | 最初添加在3.4作为临时模块 |