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,因此将运行跨平台.
该文章的摘要是4个步骤(文章中缺少以下第二步,但需要):
添加对"Microsoft CDO for Windows 2000 Library"的引用,可以在Visual Studio的"添加引用"对话框的"COM"选项卡上找到该引用.这将在您的项目中添加2个对"ADODB"和"CDO"的引用.
禁用为2参考"ADODB"和"CDO"嵌入Interop类型.(引用 - > ADODB - >属性 - >将'嵌入互操作类型'设置为False并对CDO重复相同的操作)
在代码中添加以下方法:
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)通过传递eml文件的完整路径来调用此方法,它返回的CDO.Message对象将包含您需要的所有已解析信息,包括To,From,Subject,Body.
您可能需要一个电子邮件/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
归档时间: |
|
查看次数: |
50412 次 |
最近记录: |