是否可以在.net中读取.eml文件

时间:2009-07-19 23:23:17

标签: asp.net vb.net file

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

3 个答案:

答案 0 :(得分:5)

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

这就是内部的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

答案 1 :(得分:5)

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格式。

答案 2 :(得分:2)

使用EOS文件的CDOSYS.DLL

您可以使用COM cdosys.dll('Microsoft CDO for Windows 2000 Library')'正确'(当然比尝试将其解析为文本文件更好)。

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

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

相关问题