我知道多部分电子邮件的每个部分都可以是多部分。附件是仅作为顶级部件添加,还是也可以嵌套在多部件中?
例如,我的意思是,此处attachment1.doc
是嵌套的,而attachment2.doc
则是顶级部分。
multipart/mixed |---Title: text/plain |---Text content: text/plain |---Nested multipart: multipart/mixed | |--- attachment1.doc (BASE64) |---attachment2.doc (BASE64)
我问,因为我从https://stackoverflow.com/a/27556667/492336遇到了这段代码:
# Iterate the different parts of the multipart message.
for part in msg.walk():
# Skip any nested multipart.
if part.get_content_maintype() == 'multipart':
continue
它在Python中,它们遍历消息的不同部分以搜索附件,但跳过任何本身是多部分的部分。
这样做是否正确?我尝试阅读RFC3501,但无法确定是否可以嵌套文件附件。
答案 0 :(得分:6)
没有处方限制,你很难争论所有multipart
类型的单一政策 - 它们有着截然不同的目的。
例如,使用
之类的消息multipart/mixed
+-- multipart/alternative
| +-- text/plain
| +-- multipart/related
| +-- text/html
| +-- image/png
| +-- image/png
+-- application/octet-stream; name="attachment.pdf"
...大多数希望提供消息HTML视图的客户的理智行为是选择multipart/related
内multipart/alternative
及其所有附件,并使用它来显示消息,同时将PDF显示为单独的附件。如果您只处理顶级multipart/mixed
,那么仅会看到附件,这似乎不是一种理智的方式。
另一种可以发生完全任意嵌套的情况是message/rfc822
,其中附加的消息是一个完整的MIME消息,它可能反过来又包含另一个message/rfc822
等。
任何带有(明示或暗示)Content-Disposition: attachment
的内容都是“附件”;你有时会在里面看到“附件” multipart/alternative
这意味着如果您正在显示该消息的替代视图,附件才有意义 - 我很难想出一个这样的例子,并且可能实际上推测它应该是被视为错误,并在呈现另一种替代方案时显示附件,以防万一。
答案 1 :(得分:2)
嵌套的多部分是合法的,并且在一些用例中很常见。最重要的是,如果您使用S / MIME对包含文本和图片的多部分邮件进行签名,您通常会有一个包含multipart / mixed和其他部分的顶级multipart / signed,而multipart / mixed依次包含text / plain和image / jpeg。