繁体   English   中英

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

[英]PDF Outlook Email attachment sometimes saved with no permissions

循环浏览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

我建议从检查代码开始并立即释放所有基础COM对象。 使用完后,使用System.Runtime.InteropServices.Marshal.ReleaseComObject释放Outlook对象。 如果您的加载项尝试枚举Microsoft Exchange Server上存储的集合中的256个以上Outlook项目,则这尤其重要。 如果不及时释放这些对象,则可以达到Exchange对任何一次打开的最大项目数施加的限制。 然后在Visual Basic中将变量设置为Nothing(在C#中为null)以释放对该对象的引用。 您可以在MSDN中的“ 系统释放对象”文章中了解有关此内容的更多信息。

例如:

foreach (Outlook.Attachment attach in getItem.Attachments)

Attachments属性返回Attachments类的实例,该实例应在之后释放。 另外,Attachment类的每个实例都保持活动状态,直到方法结束并运行GC。

最后,我建议改为使用for循环。 因此,您将能够立即释放每个对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM