代码之家  ›  专栏  ›  技术社区  ›  SLaks

将mime树转换为mailmessage

  •  3
  • SLaks  · 技术社区  · 15 年前

    我正在编写一个处理和转发电子邮件的C程序。我有一个pop3库和一个mime解析器,我需要将mime树复制到 System.Net.Mail.MailMessage .

    把不同的mime部分映射到哪个是最好的方法 AlternateView S LinkedResource S和 Attachment S?

    编辑 :这将适用于所有邮件客户端(发送和接收)

    5 回复  |  直到 13 年前
        1
  •  2
  •   Tim Cooper    13 年前

    从10000英尺的概述来看,这是我要做的。

    把你的哑剧部分放在树上。确保每个部分包含1个部分,并且仅包含1个部分(不是多部分/相关的父级,或类似的父级)。

    1. 检查车身的以下状况:

      1. 如果第一部分是HTML,请将其设置为消息正文

      2. 如果第一部分是纯文本,而第二部分是 HTML,将纯文本部分设置为消息正文。

      3. 如果第一部分是普通的,第二部分是HTML,请创建两个可选视图。 ***这假设这些部分都没有内容处置:附件头。

    2. 循环遍历其余部分。将其他所有内容作为附件添加,除了

      1. 设置了内容ID头的图像,或者

      2. 具有内容位置标题集的图像。

        如果这些头中有一个存在,那么我会将这些图像作为LinkedResource添加到中(仅当实际存在HTML正文部分时)。

    这应该可以让你开始,并且覆盖99%的普通邮件。

        2
  •  1
  •   Mike Green    14 年前

    将包含在多部分/可选部分中的任何文本部分(文本/纯文本、文本/HTML等)映射到AlternateView。另外,将遇到的第一个文本部分映射到AlternateView,而不管其父类型如何,以满足仅由单个文本部分组成的消息的情况。

    根据内容处置标题,将其余部分映射到附件或LinkedResource。

    将具有附件内容处置的那些部分映射到附件。

    将内容处置为内联或无内容处置标题的这些部分映射到LinkedResource。通过检查内容ID是否与从特定文本部分引用的内容ID匹配,可以细化最后一步,但出于实际目的,可以假定以这种方式创建的所有LinkedResource都属于第一个文本/HTML AlternateView(如果没有文本/HTML类型的AlternateView,则为最后创建的AlternateView)。

        3
  •  0
  •   SLaks    15 年前

    现在,我正在用 Content-Disposition 这不是 inline 或具有文本或图像以外的任何类型的mime类别, Attachment 什么 内联的 或任何具有mime类别的 Image 到A LinkedResource 在HTML视图或最后一个视图上,以及作为 AlternateView . (我还没有测试过这个)

        4
  •  0
  •   Fredrik Leijon    15 年前

    可能不是最好的方法,但我会尝试获取“原始”电子邮件,并将其替换为新电子邮件。

        5
  •  0
  •   Andreas Huber    15 年前

    嗯,你真的需要使用system.net.mail.mailmessage吗?

    system.net.mail.mailmessage只提供了mime提供的一小部分。因此,如果您的mime解析器旨在支持所有/大多数标准功能,那么您将mime消息复制到mailmessage中的目标最好是困难的,最坏是不可能的。提供pop3访问的库是否也提供了smtp访问?如果是这样的话,我会把system.net.mail.mailmessage放在一边,然后使用第三方图书馆提供的任何东西。