有没有.NET Framework方法可以解析电子邮件(MIME)?

25

有没有.NET Framework(3.5+)内置的类或一组功能可用于解析原始电子邮件(MIME文档)?

我不需要任何复杂或独立的库,它需要是内置的。我将在一些单元测试中使用它,并且只需要获取感兴趣的主要标题(收件人、发件人、主题)以及正文(在这种情况下将始终为文本,因此没有MIME树或边界)。我以前写过几个MIME解析器,如果没有现成的东西可用,我将使用正则表达式拼凑出一个。能够像这样做会很好:

MailMessage msg = MailMessage.Parse(text);

有何想法?


微软有CDO,这里有解释:https://dev59.com/CnNA5IYBdhLWcg3wgeEd(我知道这很老了,只是为了像我一样后来发现这个的人发布这个) - eselk
6个回答

27

我知道你说不使用外部库,但是我在codeplex上发布了一个库:

https://bitbucket.org/otac0n/mailutilities

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

已经使用超过40,000封真实邮件进行了测试。

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


附言:

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

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";

约翰,也许他可以使用你的源代码中的一两个类,而不是使用你的库? - Paul Sasik
John,我正在使用你的源代码,它非常有帮助!然而,随着我的更改,拥有电子邮件进行检查将非常有帮助。你是否有任何可以用来驱动测试的套件中的电子邮件?谢谢 - Erick - Erick T
2
谢谢John,我正在寻找类似的东西,发现你的正则表达式非常有用。我编写了一个扩展方法来解析Outlook MailItem的电子邮件头:http://www.lessanvaezi.com/email-headers-from-outlook-mailitem/ - Lessan Vaezi
有没有示例代码可以将此内容转换为 MailMessage 对象,以便通过 SmtpClient 发送? - jpierson
@NarekMamikonyan 规范要求使用7位纯ASCII码。 - John Gietzen

20

是的,我使用了MimeKit,从邮件中提取附件节省了我的时间。 - Julius A

4
不,目前还没有这样的方法。微软尚未创建文字转短信转换器,就像他们没有创建POP3或IMAP库一样。很遗憾。

1
这个问题的唯一真正答案! - elshev

2
我建议使用Lumisoft的IMAP和MIME解析库。我之前用过,很容易使用。 您可以从这里下载:http://www.lumisoft.ee/lsWWW/Download/Downloads/Net/ 该库还有许多其他协议,如ftp、pop3等,并且我相信源代码是可用的。请尝试在Google上搜索,也可以在codeproject.com上找到。 祝好!

你是否有一个简单的 IMAP 示例? - Jason Foglia

0

请查看Mail.dll .NET邮件组件,它具有内置的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

0

请查看我们的Rebex Secure Mail,其中包括一个(在我看来)相当不错的S/MIME解析器。特点包括:

  • 高级 MailMessage API(在常见电子邮件客户端中看到的消息)
  • 低级 MimeMessage API(访问 S/MIME 内部树)
  • 支持 MIME、S/MIME 两种协议
  • 支持由 Microsoft Outlook 生成的 TNEF(winmail.dat)
  • 消息加密
  • 消息签名
  • Unicode 和国际化支持
  • 链接资源列表(用于 HTML 邮件中的内联 CSS 和图片)
  • IEnumerable<T> 支持(需要用于 LINQ)
  • 支持所有 .NET 和 .NET Compact Framework 版本

该解析器是 Rebex Secure Mail 的一部分,您可以在此下载


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接