保存“设备无关位图”附件

时间:2015-06-26 12:16:59

标签: outlook-vba

如何正确保存此类附件(来自已签名的邮件)?我用.SaveAsFile方法保存了它,但它没有任何扩展名,也没有应用程序可以打开它。

Set OutItem = Application.ActiveExplorer.Selection.Item(1)

For Each att In OutItem.Attachments
    att.SaveAsFile "C:\Temp\" & att.DisplayName
Next

2 个答案:

答案 0 :(得分:1)

Attachment类的DisplayName属性返回一个表示名称的字符串,该字符串不需要是实际文件名,显示在代表嵌入式附件的图标下方。

尝试使用FileName属性,该属性返回表示附件文件名的String。

您也可以明确指定代码上的文件扩展名,例如:

For Each att In OutItem.Attachments
 att.SaveAsFile "C:\Temp\" & att.DisplayName & ".docx"
Next

答案 1 :(得分:0)

对于olOlE附件,您需要将附件作为IStorage COM对象打开,并从存储中的一个流中提取数据(可能会被损坏) - 您可以在OutlookSpy中看到数据:选择消息,单击OutlookSpy功能区上的IMessage按钮,转到GetAttachmentTable选项卡,双击其中一个附件。选择PR)_ATTACH_DATA_OBJ属性,右键单击,IMAPIProp :: OpenProperty,选择IID_IStorage。使用Outlook对象模型

无法在VBA中访问数据

如果使用Redemption是一个选项,其RDOAttachment。SaveAsFile方法足够智能,可以从存储中提取BMP,EMF,PDF,Excel等文件数据。像下面这样的东西(在我的头顶)应该做的工作:

  set Session = CreateObject("Redemption.RDOSession")
  Session.MAPIOBJECT = Application.Session.MAPIOBJECT
  set rMsg = Session.GetRDOObjectFromOutlookObject(Application.ActiveExplorer.Selection.Item(1))
  For Each att In rMsg.Attachments
    att.SaveAsFile "C:\Temp\" & att.FileName
  Next