【问题标题】:Are there .NET Framework methods to parse an email (MIME)?是否有 .NET Framework 方法来解析电子邮件 (MIME)?
【发布时间】:2010-12-12 18:59:33
【问题描述】:

.NET Framework (3.5+) 中是否内置了一个类或一组函数来解析原始电子邮件(MIME 文档)?

我不是在寻找任何花哨的东西或单独的库,它需要内置。我将在一些单元测试中使用它,并且只需要获取感兴趣的主要标题(To、From、Subject)以及正文(在这种情况下将始终是文本,因此没有 MIME 树或边界)。我过去写过几个 MIME 解析器,如果没有现成的东西,我会从正则表达式中组合一些东西。能够做类似的事情会很棒:

MailMessage msg = MailMessage.Parse(text);

想法?

【问题讨论】:

标签: c# .net email parsing mime


【解决方案1】:

我知道你说没有外部库,但我在 codeplex 上发布了一个库:

https://bitbucket.org/otac0n/mailutilities

MimeMessage msg = new MimeMessage(/* string, stream, or Byte[] */);

已经过 40,000 多封真实邮件的测试。

我对我的命名空间选择不太满意,但是...我懒得更改它。


PS:

在内部,我的库使用这些正则表达式作为解析器:

internal static string FullMessageMatch =
    @"\A(?<header>(?:[^\r\n]+\r\n)*)(?<header_term>\r\n)(?<body>.*)\z";
internal static string HeadersMatch =
    @"^(?<header_key>[-A-Za-z0-9]+)(?<seperator>:[ \t]*)(?<header_value>([^\r\n]|\r\n[ \t]+)*)(?<terminator>\r\n)";
internal static string HeaderSeperator =
    "\r\n";
internal static string KeyValueSeparator =
    @"\A:[ \t]*\z";

【讨论】:

  • 约翰,也许他可以使用你的源代码中的一两个类而不是使用你的库?
  • 约翰,我正在使用你的资源,它非常有帮助!但是,在进行更改时,检查电子邮件会非常有帮助。您是否有套件中的任何电子邮件可用于路测?谢谢 - 埃里克
  • 谢谢约翰,我正在寻找类似的东西,发现你的正则表达式非常有用。我为解析电子邮件标题的 Outlook MailItem 编写了一个扩展方法:lessanvaezi.com/email-headers-from-outlook-mailitem
  • 有什么例子可以说明如何将其返回到 MailMessage 中以通过 SmtpClient 发送?
  • @NarekMamikonyan 该规范需要 7 位干净的 ascii。
【解决方案2】:

不,还没有办法做到这一点。 Microsoft 没有创建文本到消息转换器,就像他们没有创建 POP3 或 IMAP 库一样。不幸。

【讨论】:

  • 这个问题的唯一真正答案!
【解决方案3】:

查看Mail.dll .NET mail component,它内置了 MIME 支持、unicode 和多国电子邮件支持:

MailBuilder builder = new MailBuilder();

// Here you get the message class with attachments, visuals
IMail message = builder.CreateFromEml(File.ReadAllText("test.eml"));

// you can access entire MIME document:
MimeDocument document = message.Document;

请注意,Mail.dll 是我创建的商业产品。

您可以在这里下载:https://www.limilabs.com/mail

【讨论】:

    【解决方案4】:

    查看我们的Rebex Secure Mail,其中包括(恕我直言)体面的 S/MIME 解析器。 Features 包括:

    • High level MailMessage API(普通邮件客户端看到的消息)
    • Low level MimeMessage API(访问 S/MIME 内部树)
    • 同时支持 MIME、S/MIME
    • 支持 Microsoft Outlook 生成的 TNEF (winmail.dat)
    • 消息加密
    • 消息签名
    • Unicode 和国际化支持
    • Linked resources list(用于 HTML 邮件中的内联 CSS 和图片)
    • IEnumerable 支持(LINQ 需要)
    • 支持迄今为止发布的所有 .NET 和 .NET 紧凑型框架

    解析器是 Rebex Secure Mail 的一部分,您可以download it here

    【讨论】:

      【解决方案5】:

      我推荐 Lumisoft 的 IMAP 和 MIME 解析器库。我以前使用过,而且很容易使用。 您可以从这里下载:http://www.lumisoft.ee/lsWWW/Download/Downloads/Net/ 该库有许多其他协议,如 ftp、pop3 等,我确信 sc 可用。尝试用谷歌搜索它,你也可以在 codeproject.com 上找到它 问候

      【讨论】:

      • 你碰巧有一个简单的 imap 例子吗?
      【解决方案6】:

      对免费、开源(MIT 许可)和快速MimeKit

      印象深刻

      【讨论】:

      • 是的,使用 MimeKit 并节省了我从邮件中提取附件的时间
      猜你喜欢
      • 2011-02-13
      • 2016-10-05
      • 2017-08-05
      • 2013-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多