使用c#提取电子邮件内容

时间:2010-07-01 15:00:32

标签: c# .net email

我有一个包含电子邮件的文件。我想知道.net中是否有任何内置的库或类可以让我直接提取电子邮件的内容 像这样的东西

Library lx = new Library(“email_file”);

Console.writeline(lx.From());

Console.writeline(lx.To());

file attachment = lx.attachment();

我编写了一个程序,可以通过使用正则表达式扫描包含电子邮件的文件并从电子邮件中提取单个字段来执行这些任务,例如:To,From,Attachment等。 但是,要求是使用一些内置的库或类来提取这些东西。

非常感谢任何帮助

3 个答案:

答案 0 :(得分:5)

没有直接支持在.NET中阅读电子邮件。你必须自己破解(一两天之后你可能能够处理95%的正常eml电子邮件,经过几个月的努力,你将能够处理剩余的5%)。完整的电子邮件解析意味着正确处理国际字符,附件,多个编码方案,附件,作为附件发送的电子邮件,加密和签名的电子邮件,以便能够处理流行电子邮件客户端的常见错误等...

有两种常见的电子邮件文件格式:

<强> EML 基于文本的格式,可以在* nix和windows中找到。 Outlook Express和Thunderbird客户端可以以eml格式读/写消息。如果您使用.NET SmtpClient using a PickupDirectory发送电子邮件,则将使用此格式。 EML格式在RFC 2045,2046,2047,2048,2049,2822中规定。

您可以找到大量用于读取eml文件的第三方组件。以下代码使用我们的Rebex Secure Mail(但您可以随意使用谷歌)。

using Rebex.Mail;
using Rebex.Mime.Headers;

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

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

Console.Write(message.From);
Console.Write(message.To)
foreach (Attachment attachment in message.Attachments)
{
    // Save the file 
    Console.WriteLine ("Saving '{0}' ({1}).", 
     attachment.FileName, attachment.MediaType);
    attachment.Save (attachment.FileName);
}

你可以download trial here

<强> MSG Outlook使用的二进制格式。微软最近发布了它的规范。有一个带有c#库的codeproject article应该能够读取它。还有一些第三方商业组件,但我没有亲自尝试过。

答案 1 :(得分:0)

这取决于邮件在文件中的存储方式。它来自哪里?

如果是Outlook电子邮件,您应该查看Outlook interop库。

答案 2 :(得分:0)

我不确定是否有内置类可以执行此操作,但我们使用aspnetemail.com的组件执行此操作。

我们使用他们的pop组件来获取来自服务器的电子邮件,他们的mime组件来读取它(和附件),以及他们的aspnetemail组件来发送电子邮件。

我希望我听起来不像广告,但我们对他们的服务非常满意。