使用以下代码循环浏览Outlook邮件存储中的邮件(getItem对象)并将附件另存为文件:
try
{
foreach (Outlook.Attachment attach in getItem.Attachments)
{
if (attach.FileName == sItemName)
{
string sSaveFile = Path.GetTempPath() + "Attachment" + sItemType;
if (System.IO.File.Exists(sSaveFile)) System.IO.File.Delete(sSaveFile);
attach.SaveAsFile(sSaveFile);
sContent = Common.GetFileContent2(sSaveFile);
}
}
}
catch (Exception Ex)
{
Common.LogError("GetUpdated", Ex, "Get text from Email attachment", "Error", false);
}
System.Runtime.InteropServices.Marshal.ReleaseComObject(getItem.Attachments);
我发现当另一个PDF文件出现时,提取的PDF文件有时无法删除。无法在资源管理器中查看提取的PDF文件的文件权限 - 属性的“安全”选项卡显示"您必须具有读取权限才能查看此对象的属性"。可以阅读“常规属性”选项卡。
我在Windows 8.1中使用Outlook 2007
答案 0 :(得分:0)
我建议从查看代码并立即释放所有底层COM对象开始。完成使用后,使用System.Runtime.InteropServices.Marshal.ReleaseComObject释放Outlook对象。如果您的加载项尝试枚举存储在Microsoft Exchange Server上的集合中超过256个Outlook项目,这一点尤为重要。如果您未及时发布这些对象,则可以达到Exchange对任何时候打开的最大项目数的限制。然后在Visual Basic中将变量设置为Nothing(C#中为null)以释放对该对象的引用。您可以在MSDN中的Systematically Releasing Objects文章中了解有关该内容的更多信息。
例如:
foreach (Outlook.Attachment attach in getItem.Attachments)
Attachments属性返回应该在之后释放的Attachments类的实例。此外,Attachment类的每个实例都保持活动状态,直到方法结束并且GC运行。
最后,我建议改用 for 循环。因此,您将能够立即释放每个对象。