:管理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类型提高
KeyError。
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_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, 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:
添加Content-Type标题和
maintype/subtypevalue.- 对于
str,将MIMEmaintype设置为text,如果指定则将子类型设置为subtype,如果不是则将其设置为plain。 - 对于
bytes,使用指定的maintype和subtype,orraise aTypeError如果没有说明的话 - 对于
EmailMessage对象,设置maintypetomessage,并将子类型设置为subtype如果指定或rfc822如果不是。如果subtype是partial,引发错误(bytes对象必须使用toconstructmessage/partial部分).
如果提供charset(仅适用于
str),使用指定的字符集将字符串编码为字节。默认为utf-8。如果指定的charset是standardMIME charset名称的已知别名,请改用标准字符集如果设置了cte,则使用指定的内容传输编码对有效负载进行编码,并将Content-Transfer-Encoding标头设置为该值。cte的可能值是
quoted-printable,base64,7bit,8bit和binary。如果输入无法以指定的编码进行编码(例如,对于包含非ASCII值的输入,请指定cte7bit),请引发ValueError.- 对于
str物品,如果cte未设置使用启发式来确定最紧凑的编码. - 对于
EmailMessage,每个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作为临时模块 |