附件可以在MIME中嵌套的多部分吗?

sas*_*alm 4 email mime

我知道多部分电子邮件的每个部分都可以是多部分.附件是仅作为顶级部件添加,还是也可以嵌套在多部件中?

例如,我的意思是,这里attachment1.doc是嵌套的,而是attachment2.doc顶级部分.

multipart/mixed
   |---Title: text/plain
   |---Text content: text/plain
   |---Nested multipart: multipart/mixed
   |      |--- attachment1.doc (BASE64)
   |---attachment2.doc (BASE64)

我问,因为我从/sf/answers/1928966721/遇到了这段代码:

    # Iterate the different parts of the multipart message.
    for part in msg.walk():
        # Skip any nested multipart.
        if part.get_content_maintype() == 'multipart':
            continue
Run Code Online (Sandbox Code Playgroud)

它是在Python中,它们遍历消息的不同部分以搜索附件,但跳过任何本身是多部分的部分.

他们这样做是否正确?我尝试阅读RFC3501,但找不到任何明确的说明文件附件是否可以嵌套.

tri*_*eee 6

没有处方限制,你很难争论所有multipart类型的单一政策- 它们有着截然不同的目的.

例如,有一条消息

multipart/mixed
  +-- multipart/alternative
  |     +-- text/plain
  |     +-- multipart/related
  |           +-- text/html
  |           +-- image/png
  |           +-- image/png
  +-- application/octet-stream; name="attachment.pdf"
Run Code Online (Sandbox Code Playgroud)

...大多数想要提供消息的HTML视图的客户的理智行为是选择multipart/related内部multipart/alternative及其所有附件,并使用它来显示消息,同时将PDF显示为单独的附件.如果您只处理顶级multipart/mixed,则只能 看到附件,这似乎不是一种理智的方法.

可以发生完全任意嵌套的另一种情况是message/rfc822附加消息是其自身的完整MIME消息,其可以message/rfc822递归地包含另一个等.

任何带有(明示或暗示)的东西Content-Disposition: attachment都是"附件"; 你有时会看到里面的"附件",例如multipart/alternative,如果你正在显示消息的另一种观点,这意味着附件才有意义 - 我很难想出一个这样的例子,并且可能实际推测它应该被视为一个错误,并在渲染另一个替代方案时显示附件,以防万一.