2009-07-19 129 views

回答

4

当然可以。他们只是普通的文本文件,没什么奇特的。

这是一个EML文件看起来像什么在里面

X-Sender: [email protected] 
X-Receiver: [email protected] 
MIME-Version: 1.0 
From: [email protected] 
To: [email protected] 
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 
+0

嗯......好,很好,我想。 eml是从outlook保存的默认电子邮件标准,但事实证明.msg是(它似乎不是文本格式),那么.eml文件从哪里来? – CodeKiwi 2009-07-19 23:37:16

+0

当您设置分拣目录时,Outlook Express和那些ASP.NET将脱机。 – 2009-07-19 23:39:01

5

EML(MIME消息)

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

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

考虑以下困难:

  • unicode的电子邮件
  • 从右到左的语言
  • 纠正流行的邮件客户端造成众所周知的错误畸形EML文件和服务器
  • 处理S/MIME(加密和签名的电子邮件)
  • 用编码附件的几种方法正确处理
  • 处理内嵌图片和样式表嵌入到HTML电子邮件
  • 确保它解析正确地从迈克·克里斯平(MIME和IMAP的RFC的合着者)一个MIME torture message
  • 确保不良消息不会导致缓冲区OVERUN或其他应用程序崩溃
  • 处理分层消息(消息附带消息)
  • 确保其正确处理非常大的邮件

成熟等解析器需要数年时间和连续的反馈为它的用户。现在,.NET框架中没有包含这样的解析器。直到它改变,我会建议从一个建立的供应商获得第三方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 Outlook引入一个电子邮件消息格式。有MSG format specification on Microsoft site。您可能还想尝试第三方组件。我知道一个MSG format component from IndependentSoft,但没有亲自尝试过。我们的Rebex Secure Mail版本1.0.4060.0或更高版本也支持MSG格式。

2

使用CDOSYS.DLL为EML文件

您可以将这个“正常”呢(当然不是试图去解析它作为一个文本文件更好)使用COM CDOSYS.DLL(“微软CDO的Windows 2000年图书馆“)。

您需要通过添加引用来为它创建一个.Net包装:因为它取决于ADODB.dll,因此您会在您的bin中为您创建Interop.CDO.dll和Interop.ADODB.dll目录。

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

相关问题