我正在编写一项服务,该服务通过删除所有恶意内容来清理文件。我正在使用Interop Excel和Word api,如下所示:
胜过
var excelApp = new Microsoft.Office.Interop.Excel.Application();
excelApp.Visible = false;
excelApp.AutomationSecurity = Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityForceDisable;
try
{
var workbook = excelApp.Workbooks.Open(fileToClean.InputFileName);
词
var wordApp = new Microsoft.Office.Interop.Word.Application
{
Visible = false,
AutomationSecurity = Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityForceDisable
};
try
{
var wordDoc = wordApp.Documents.Open(fileToClean.InputFileName, false, true);
我正在尝试找到一种类似的方法来打开.eml Outlook文件。我找不到任何使用Outlook Interop打开.eml文件的方法。
EML 文件格式不是 Outlook 的原生格式 - MSG 格式是(您可以使用 Namespace.GetSharedItem
打开 MSG 文件(。即使您在Windows资源管理器中双击EML文件,Outlook也很乐意为您打开EML文件。
若要读取 EML 文件,需要在代码中显式分析该文件,或使用众多 MIME 处理库之一。如果使用救赎(我是它的作者(是一个选项,你可以创建一个临时的味精文件并将EML文件导入其中。
以下代码将创建一个 MSG 文件,并使用 Redemption(RDOSession 对象(将 EML 文件导入其中:
set Session = CreateObject("Redemption.RDOSession")
Session.MAPIOBJECT = outlookApp.Session.MAPIOBJECT
set Msg = Session.CreateMessageFromMsgFile("C:Temptemp.msg")
Msg.Import "C:Temptest.eml", 1024
Msg.Save
MsgBox Msg.Subject
然后,您可以使用消息 (RDOMail( 访问它的各种属性(主题、正文等(。
另请记住,不能从 Windows 服务(如 IIS(使用 Office 应用(Excel、Word 或 Outlook(。
了德米特里,我设法找到了解决方案。我最终使用了Independentsoft.Msg nuget包。代码在这里:
Message message = new Message(fileToClean.InputFileName);
var attachmentList = new List<Attachment>();
// First check all attachments, and add the clean ones to the attachment list
foreach (BodyPart bodyPart in message.BodyParts)
{
if ((bodyPart.ContentDisposition != null) &&
(bodyPart.ContentDisposition.Type == ContentDispositionType.Attachment))
{
foreach (Attachment attachment in message.GetAttachments())
{
if (attachment.GetFileName() == bodyPart.ContentDisposition.Parameters[0].Value)
{
if (IsClean(attachment, fileToClean))
{
attachmentList.Add(attachment);
}
break;
}
}
}
}
// Remove all attachements
message.BodyParts.RemoveAll(bp =>
(bp.ContentDisposition != null) &&
(bp.ContentDisposition.Type ==
ContentDispositionType.Attachment));
// Attach Cleaned attachments
foreach (Attachment attachment in attachmentList)
{
message.BodyParts.Add(new BodyPart(attachment));
}