PDF Outlook电子邮件附件有时保存没有权限

时间:2015-05-08 04:55:51

标签: c# pdf outlook email-attachments

使用以下代码循环浏览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

1 个答案:

答案 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 循环。因此,您将能够立即释放每个对象。