【问题标题】:Is it possible to read .eml files in .net是否可以在 .net 中读取 .eml 文件
【发布时间】:2010-11-12 04:14:58
【问题描述】:

我想知道是否可以在 dot net(最好来自内存流)中解析 .eml 和 .msg 文件,以便我可以在 ASP.Net 页面上使用它们。

【问题讨论】:

标签: asp.net vb.net file


【解决方案1】:

是的,你可以。它们只是普通的文本文件,没什么特别的。

这是一个 eml 文件在里面的样子

X-Sender: somewhere@google.com
X-Receiver: somewhere@google.com
MIME-Version: 1.0
From: somewhere@google.com
To: somewhere@google.com
Date: 7 Jun 2009 18:58:01 -0400
Subject: From someone you know
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable

This is the body

【讨论】:

  • 嗯...好吧,太好了,我认为 .eml 是从 Outlook 保存的电子邮件的默认标准,但事实证明 .msg 是(这似乎不是文本格式),所以在哪里.eml 文件来自哪里?
  • Outlook Express 和那些 ASP.NET 在设置了 Pickup 目录后丢弃。
  • 当邮件的内容类型为 html 时呢?
  • 寻找我想像的内容类型,然后其余的将有 html。
  • 好的 eml/MIME 解析器应该能够正确解析来自 Mike Crispin(MIME 和 IMAP RFC 的合著者)的 Mime Torture 示例消息?消息的结构可以显示在rebex.net/secure-mail.net/sample-mime-explorer.aspx。测试消息包含在下载包中。几个附件、签名、不同的编码类型和怪癖使这项任务非常有趣;-)
【解决方案2】:

EML(MIME 消息)

在大多数情况下,EML 是带有邮件消息的 MIME 编码文件。 EML 文件的常见来源包括从 Outlook Express 或 Thunderbird 保存的邮件、从 IMAP 或 POP3 服务器下载的邮件。

正确加载 EML 文件并不像看起来那么容易。您可以在几天内编写一个适用于 95% 情况的实现。剩下的 5% 至少需要几个月的时间;-)。我知道,因为我参与了开发。

考虑以下困难:

  • unicode 电子邮件
  • 从右到左的语言
  • 更正由流行邮件客户端和服务器中众所周知的错误导致的格式错误的 EML 文件
  • 处理 S/MIME(加密和签名的电子邮件)
  • 正确处理几种编码附件的方法
  • 处理嵌入到 HTML 电子邮件中的内联图像和样式表
  • 确保它正确解析来自 Mike Crispin(Mime 和 IMAP RFC 的合著者)的 MIME torture message
  • 确保格式错误的消息不会导致缓冲区溢出或其他应用程序崩溃
  • 处理分层消息(带有附加消息的消息)
  • 确保它能正确处理非常大的电子邮件

这种解析器的成熟需要数年时间,并需要持续不断地为其用户提供反馈。目前 .NET Framework 中还没有这样的解析器。在它改变之前,我建议从成熟的供应商那里获得第三方 MIME 解析器。

以下代码使用我们的Rebex Secure Mail component,但我确信类似的任务也可以轻松地用其他供应商的组件复制。

代码基于Mail Message tutorial

// create an instance of MailMessage 
MailMessage message = new MailMessage();

// load the message from a local disk file 
message.Load("c:\\message.eml");

// load the message from MemoryStream
MemoryStream stream = new MemoryStream(); 
// TODO: fill the stream, seek to the beginning
message.Load(stream);

MSG(Outlook 邮件)

MSG 格式是 Microsoft 在 Microsoft Outlook 中引入的一种电子邮件格式。有MSG format specification on Microsoft site。您可能还想尝试第三方组件。我知道一个MSG format component from IndependentSoft,但没有亲自尝试过。此外,我们的Rebex Secure Mail 1.0.4060.0 或更高版本也支持 MSG 格式。

【讨论】:

  • 在大多数情况下,如果他们使用与作者相关的专有软件,则此答案仅适用于该问题......我可能会补充说,这不是完成此广告的唯一问题。跨度>
【解决方案3】:

对 EML 文件使用 CDOSYS.DLL

您可以使用 COM cdosys.dll(“Microsoft CDO for Windows 2000 Library”)“正确地”执行此操作(当然比尝试将其解析为文本文件更好)。

您需要通过添加引用为其创建一个 .Net 包装器:因为它依赖于 ADODB.dll,您将在 bin 目录中为您创建 Interop.CDO.dllInterop.ADODB.dll

有很多关于使用CDO 发送电子邮件的信息,但几乎没有关于使用它阅读EML 文件的信息,但我发现这个页面让我开始使用http://support.microsoft.com/kb/310224

【讨论】:

    猜你喜欢
    • 2014-12-20
    • 2011-07-30
    • 2015-10-02
    • 2014-08-16
    • 1970-01-01
    • 2013-06-23
    • 2014-11-27
    • 2012-08-03
    • 2022-01-01
    相关资源
    最近更新 更多