Python:如何在注意图形结构的同时迭代 MIME 消息树?
Posted
技术标签:
【中文标题】Python:如何在注意图形结构的同时迭代 MIME 消息树?【英文标题】:Python: How to iterate over MIME message tree while taking notice of the graph structure? 【发布时间】:2021-12-12 18:16:27 【问题描述】:我想知道如何在 Python 中获取 MIME 消息图结构(例如,作为邻接矩阵)。
根据官方 Python3 文档,有一个 email.walk()
方法可以遍历所有消息部分:
for part in email.walk():
print(part.get_content_type())
但是输出没有显示消息的层次结构。例如以下输出:
multipart/report
text/plain
message/delivery-status
text/plain
text/plain
message/rfc822
text/plain
它可以表示以下两种树结构中的任何一种:
multipart/report
text/plain
message/rfc822
text/plain
text/plain
message/rfc822
text/plain
或
multipart/report
text/plain
message/rfc822
text/plain
text/plain
message/rfc822
text/plain
如果是 MIME 消息,python 中是否有任何方法可以帮助确定确切的分层(图形)结构?
【问题讨论】:
请提供足够的代码,以便其他人更好地理解问题。您尝试过什么,或者您正在考虑尝试什么? 【参考方案1】:假设您已将电子邮件读入变量email
。
然后,如果您执行print(email.get_content_type())
,它应该显示类似multipart/report
的内容(以您提供的示例为例)。
那你可以试试
if email.is_multipart():
for subpart in email.get_payload():
print(email.get_content_type())
然后打印出来
text/plain
message/rfc822
如果您考虑您提供的第二个树结构作为示例。
您可以对电子邮件的任何部分执行上述操作;如果它是多部分的,那么它将基本上分解成它的组件。
您可以使用它来创建一个递归函数,该函数可能会在打印部件的内容类型之前打印一个选项卡,具体取决于它的嵌套深度。
自从我上次使用电子邮件以来已经有一段时间了,但这应该可以解决问题。
【讨论】:
以上是关于Python:如何在注意图形结构的同时迭代 MIME 消息树?的主要内容,如果未能解决你的问题,请参考以下文章
哪些类似 python deque 的容器在突变期间保留有效的迭代器?
递归:如何避免 Python set changed set 在迭代 RuntimeError 期间