将MIME树转换为MailMessage

时间:2009-06-16 11:41:22

标签: .net mime mailmessage

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

将不同的MIME部分映射到AlternateViewLinkedResourceAttachment的最佳方法是什么?

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

5 个答案:

答案 0 :(得分:2)

从10,000英尺的概述,我会做的就是这样。

将你的哑剧部分展平成树。确保每个部分包含1个,只包含1个部分(不是像多部分/相关的父类,或类似的东西)。

  1. 检查身体的以下条件:

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

    2. 如果第一部分是纯文本,第二部分是不是 html,请将纯文本部分设置为邮件正文。

    3. 如果第一部分是普通部分,第二部分是html,则创建2个替代视图。 ***这假设这些部分都没有Content-Disposition:附件标题。

  2. 循环通过其余部分。将其他所有内容添加为附件,但

    除外
    1. 具有content-id标头集的图片,或

    2. 设置了内容位置标头的图片。

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

  3. 这应该让你开始,并覆盖大约99%的正常电子邮件。

答案 1 :(得分:1)

将多部分/替代部件中包含的任何文本部分(text / plain,text / html等)映射到AlternateView。同时将遇到的第一个文本部分映射到AlternateView,而不管其父类型如何,以满足仅由单个文本部分组成的消息的情况。

将其余部分映射到Attachment或LinkedResource,具体取决于Content-Disposition标头。

将具有附件内容处理的部分映射到附件。

使用内联处理内联或没有Content-Disposition标头将这些部分映射到LinkedResource。最后一步可以通过检查Content-ID与特定文本部分引用的Content-ID匹配来实现,但出于实际目的,可以假设以这种方式创建的所有LinkedResource都属于第一个text / html AlternateView (或者最后创建的AlternateView,如果没有text / html类型的AlternateView)。

答案 2 :(得分:0)

现在,我正在复制Content-Disposition不是inline,或者将MIME类别除了文字或图片以外的任何内容复制到Attachment,任何内容inline,或HTML视图或最后一个视图中MIME类别为ImageLinkedResource的任何内容,以及AlternateView之外的任何内容。 (我还没有测试过这个)

答案 3 :(得分:0)

可能不是最好的方式,但我会尝试获取“原始”电子邮件,只需用新电子邮件替换为“

答案 4 :(得分:0)

嗯,你绝对需要使用System.Net.Mail.MailMessage吗?

System.Net.Mail.MailMessage仅提供MIME提供的一小部分。因此,如果您的MIME解析器旨在支持所有/大多数标准功能,那么将MIME消息复制到MailMessage的目标将是困难的,最坏的情况是不可能的。提供POP3访问的库是否也提供SMTP访问?如果是这样的话,我将单独留下System.Net.Mail.MailMessage,并与第三方库提供的内容一起使用。