将EmailMessage对象转换为dict
项目描述
注意: 此项目已更名为mailbits。请参阅那里以获取所有未来的更新和新功能。
email2dict 将Python Message 和 EmailMessage 实例转换为结构化的 dict。需要检查一个 Message 但发现内置的Python API过于繁琐?需要检查 Message 是否具有您期望的内容和结构?需要比较两个 Message 实例以检查相等性?需要格式化打印 Message 的结构?那么 email2dict 就是您的得力助手。
安装
email2dict 需要 Python 3.6 或更高版本。只需使用 Python 3 的 pip 安装即可(您有 pip 吗?)
python3 -m pip install email2dict
示例
Python文档中的电子邮件示例页面(https://docs.pythonlang.cn/3/library/email.examples.html)包含了一个使用替代纯文本版本构建HTML电子邮件的示例(标题为“午餐时我们吃芦笋”的那个示例)。将生成的EmailMessage对象传递给email2dict()函数会产生以下输出结构
{
"unixfrom": None,
"headers": {
"subject": "Ayons asperges pour le déjeuner",
"from": [
{
"display_name": "Pepé Le Pew",
"address": "pepe@example.com",
},
],
"to": [
{
"display_name": "Penelope Pussycat",
"address": "penelope@example.com",
},
{
"display_name": "Fabrette Pussycat",
"address": "fabrette@example.com",
},
],
"content-type": {
"content_type": "multipart/alternative",
"params": {},
},
},
"preamble": None,
"content": [
{
"unixfrom": None,
"headers": {
"content-type": {
"content_type": "text/plain",
"params": {},
},
},
"preamble": None,
"content": (
"Salut!\n"
"\n"
"Cela ressemble à un excellent recipie[1] déjeuner.\n"
"\n"
"[1] http://www.yummly.com/recipe/Roasted-Asparagus-Epicurious-203718\n"
"\n"
"--Pepé\n"
),
"epilogue": None,
},
{
"unixfrom": None,
"headers": {
"content-type": {
"content_type": "multipart/related",
"params": {},
},
},
"preamble": None,
"content": [
{
"unixfrom": None,
"headers": {
"content-type": {
"content_type": "text/html",
"params": {},
},
},
"preamble": None,
"content": (
"<html>\n"
" <head></head>\n"
" <body>\n"
" <p>Salut!</p>\n"
" <p>Cela ressemble à un excellent\n"
" <a href=\"http://www.yummly.com/recipe/Roasted-Asparagus-"
"Epicurious-203718\">\n"
" recipie\n"
" </a> déjeuner.\n"
" </p>\n"
" <img src=\"cid:RANDOM_MESSAGE_ID\" />\n"
" </body>\n"
"</html>\n"
),
"epilogue": None,
},
{
"unixfrom": None,
"headers": {
"content-type": {
"content_type": "image/png",
"params": {},
},
"content-disposition": {
"disposition": "inline",
"params": {},
},
"content-id": ["<RANDOM_MESSAGE_ID>"],
},
"preamble": None,
"content": b'IMAGE BLOB',
"epilogue": None,
},
],
"epilogue": None,
},
],
"epilogue": None,
}
API
email2dict模块提供了一个名为email2dict的单个函数
email2dict(msg: email.message.Message, include_all: bool = False) -> Dict[str, Any]
将一个Message对象转换为一个dict。所有编码的文本和字节都将解码成它们的自然值。
默认情况下,任何特定于消息编码方式的信息(如内容类型参数、内容传输编码等)都不会被报告,因为重点是实际内容,而不是表示它的选择。如果仍然想包含这些信息,请将include_all设置为True。
输出结构包含以下字段
- unixfrom
如果有的话,表示mbox中消息开始的“From “行
- headers
一个将小写标题字段名映射到值的dict。以下标题有特殊表示
- subject
一个单独的字符串
- from、to、cc、bcc、resent-from、resent-to、resent-cc、resent-bcc、reply-to
一个包含组/地址的列表。地址表示为具有两个字符串字段的dict:display_name(如果没有给出则为空字符串)和address。组表示为具有group字段(给出组的名称)和addresses字段(给出组中地址的列表)的dict。
- message-id
一个单独的字符串
- content-type
包含一个content_type字段(形式为maintype/subtype的字符串,例如,“text/plain”)和一个params字段(具有字符串键和值的dict)。除非include_all为True,否则将丢弃charset和boundary参数。
- date
一个datetime.datetime实例
- orig-date
一个datetime.datetime实例
- resent-date
一个datetime.datetime实例的列表
- sender
一个单独的地址dict
- resent-sender
地址dict的列表
- content-disposition
包含一个disposition字段(值为“inline”或“attachment”)和一个params字段(具有字符串键和值的dict)的dict。
- content-transfer-encoding
一个单独的字符串。除非include_all为True,否则将丢弃此标题。
- mime-version
一个单独的字符串。除非include_all为True,否则将丢弃此标题。
所有其他标题都表示为字符串的列表。
- preamble
消息的前言
- content
如果消息是多部分的,这是一个与顶级 dict 结构相同格式的消息 dict 列表。如果消息的 Content-Type 是 message/rfc822 或 message/external-body,这是一个单独的消息 dict。如果消息的 Content-Type 是 text/*,这是一个表示消息内容的 str。否则,这是一个表示消息内容的 bytes。
- 结尾
消息的 结尾
项目详情
email2dict-0.1.0.post1.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 67a17a3ca107ca19db09417bfac9091473953abc672c7f3e49d488f05759c7df |
|
MD5 | 60c02a3d6f2ad48e1160fd6f976fdadc |
|
BLAKE2b-256 | 5184000b599c4d6a63dd96db0950d3c9b69f99aa1a49d2c0228409d21ab65872 |
email2dict-0.1.0.post1-py3-none-any.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 114f9f1d9dbdab1cfbf285a19bd0a6320e55273605aa317423665917b2f1d8ed |
|
MD5 | 97e7c1ea7b8c14de569032936f6b840f |
|
BLAKE2b-256 | 5e405ea8bd42f83b6be09b2d7cc4788bdbb88275bf78d83b0134c8a9922b73c4 |