【发布时间】:2010-11-12 04:14:58
【问题描述】:
我想知道是否可以在 dot net(最好来自内存流)中解析 .eml 和 .msg 文件,以便我可以在 ASP.Net 页面上使用它们。
【问题讨论】:
我想知道是否可以在 dot net(最好来自内存流)中解析 .eml 和 .msg 文件,以便我可以在 ASP.Net 页面上使用它们。
【问题讨论】:
是的,你可以。它们只是普通的文本文件,没什么特别的。
这是一个 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(MIME 消息)
在大多数情况下,EML 是带有邮件消息的 MIME 编码文件。 EML 文件的常见来源包括从 Outlook Express 或 Thunderbird 保存的邮件、从 IMAP 或 POP3 服务器下载的邮件。
正确加载 EML 文件并不像看起来那么容易。您可以在几天内编写一个适用于 95% 情况的实现。剩下的 5% 至少需要几个月的时间;-)。我知道,因为我参与了开发。
考虑以下困难:
这种解析器的成熟需要数年时间,并需要持续不断地为其用户提供反馈。目前 .NET Framework 中还没有这样的解析器。在它改变之前,我建议从成熟的供应商那里获得第三方 MIME 解析器。
以下代码使用我们的Rebex Secure Mail component,但我确信类似的任务也可以轻松地用其他供应商的组件复制。
// 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 格式。
【讨论】:
对 EML 文件使用 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
【讨论】: