我正在编写一项通过删除所有恶意内容来清理文件的服务。我正在使用Interop Excel& Word api是这样的:
Excel中
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文件的任何方法。
答案 0 :(得分:0)
EML文件格式不是Outlook的原生格式 - MSG格式是(您可以使用Namespace.GetSharedItem
打开MSG领域)。即使Outlook在Windows资源管理器中双击它也很乐意为您打开EML文件。
要读取EML文件,您需要在代码中显式解析它,或者使用MIME处理组件的数百个组件之一。如果使用Redemption是一个选项,您可以创建一个临时MSG文件并将EML文件导入其中。
以下代码将创建一个MSG文件,并使用Redemption(RDOSession对象)将EML文件导入其中:
set Session = CreateObject("Redemption.RDOSession")
Session.MAPIOBJECT = outlookApp.Session.MAPIOBJECT
set Msg = Session.CreateMessageFromMsgFile("C:\Temp\temp.msg")
Msg.Import "C:\Temp\test.eml", 1024
Msg.Save
MsgBox Msg.Subject
然后,您可以使用消息(RDOMail)访问各种属性(主题,正文等)
另请注意,Windows服务(例如IIS)中不能使用Office应用程序(Excel,Word或Outlook)。
答案 1 :(得分:0)
感谢德米特里,我设法找到了解决方案。我最终使用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));
}