关于在C#中解析.eml文件的建议

ade*_*825 42 c# eml

我有一个包含电子邮件会话的.eml文件目录.在解析这种类型的文件的C#中是否有推荐的方法?

Rie*_*end 62

我发布了一个示例项目来说明Github的这个答案

CDO COM DLL是Windows/IIS的一部分,可以在.net中引用.它将提供准确的解析和一个漂亮的对象模型.与ADODB.DLL的引用结合使用.

public CDO.Message LoadEmlFromFile(String emlFileName)
{
    CDO.Message msg = new CDO.MessageClass();
    ADODB.Stream stream = new ADODB.StreamClass();

    stream.Open(Type.Missing, ADODB.ConnectModeEnum.adModeUnknown, ADODB.StreamOpenOptionsEnum.adOpenStreamUnspecified, String.Empty, String.Empty);
    stream.LoadFromFile(emlFileName);
    stream.Flush();
    msg.DataSource.OpenObject(stream, "_Stream");
    msg.DataSource.Save();

    stream.Close();
    return msg;
}
Run Code Online (Sandbox Code Playgroud)

- 2017年8月新增:另请查看MimeKit:https://github.com/jstedfast/MimeKit.它支持.Netstandard,因此将运行跨平台.

  • 可以从"添加引用"对话框中的"COM"选项卡添加对dll的引用.它列在"Microsoft CDO for Windows 2000 Library"下.正如里斯所说,它包含在IIS中. (6认同)
  • 我得到编译错误 - 类型'CDO.MessageClass'没有定义构造函数......类似于'ADOBD.StreamClass'.任何的想法? (3认同)

Mau*_*fer 11

LumiSoft包含一个Mime解析器.

Sasa还包括一个Mime解析器.

  • 有人看的参考用法:https://github.com/fschwiet/ManyConsole/blob/master/SampleConsole/DumpEmlFiles.cs (5认同)
  • 它现在位于https://github.com/fschwiet/ManyConsole/blob/master/SampleConsole/DumpEmlFilesCommand.cs (3认同)

Suj*_*ewa 9

请点击此链接获得一个好的解决方案

该文章的摘要是4个步骤(文章中缺少以下第二步,但需要):

  1. 添加对"Microsoft CDO for Windows 2000 Library"的引用,可以在Visual Studio的"添加引用"对话框的"COM"选项卡上找到该引用.这将在您的项目中添加2个对"ADODB"和"CDO"的引用.

  2. 禁用为2参考"ADODB"和"CDO"嵌入Interop类型.(引用 - > ADODB - >属性 - >将'嵌入互操作类型'设置为False并对CDO重复相同的操作)

  3. 在代码中添加以下方法:

    protected CDO.Message ReadMessage(String emlFileName)
    {
        CDO.Message msg = new CDO.MessageClass();
        ADODB.Stream stream = new ADODB.StreamClass();
        stream.Open(Type.Missing, 
                       ADODB.ConnectModeEnum.adModeUnknown, 
                       ADODB.StreamOpenOptionsEnum.adOpenStreamUnspecified,                                                                         
                       String.Empty, 
                       String.Empty);
        stream.LoadFromFile(emlFileName);
        stream.Flush();
        msg.DataSource.OpenObject(stream, "_Stream");
        msg.DataSource.Save();
        return msg;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 通过传递eml文件的完整路径来调用此方法,它返回的CDO.Message对象将包含您需要的所有已解析信息,包括To,From,Subject,Body.


Sam*_*uel 4

您可能需要一个电子邮件/MIME 解析器。解析所有标头字段并不是很困难,但是分离出各种 MIME 类型(例如图像、附件、各种文本和 html 部分等)可能会变得非常复杂。

我们使用第三方工具,但有很多 C# 工具/库。在 Google 中搜索免费的 C# 电子邮件 MIME 解析器。就像我得到这个一样:

http://www.codeproject.com/Articles/11882/Advanced-MIME-Parser-Creator-Editor http://www.lumisoft.ee/lswww/download/downloads/Net/info.txt