当命中发送按钮时,使用VBA更改特定附件的名称

时间:2017-05-26 22:41:02

标签: vba outlook-vba

使用Microsoft Outlook,我试图在用户点击"发送"时更改特定附件的名称。新Outlook电子邮件中的按钮。

如果找到带有名称的附件,则会将该附件的名称更改为电子邮件的主题。

在下面的示例中,我正在使用" form.pdf"作为目标附件。

当我运行代码并尝试更改DisplayName时,它不会更改电子邮件中实际附件的名称。任何建议?

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
    Dim myAttachments As Outlook.Attachments
    Set myAttachments = Item.Attachments

    For Each objAtt In myAttachments  

        If LCase(objAtt.DisplayName) = "form.pdf" Then
            objAtt.DisplayName = Item.Subject & ".pdf"
        End If

    Next
End Sub

1 个答案:

答案 0 :(得分:0)

自Outlook 2002起,

Attachment.DisplayName属性绝对没有任何内容 - 这样做是为了安全起见,以防止人们将Evil.exe显示为ReadMe.txtAttachment.FileName属性是只读的。

理论上,所有需要做的就是设置PR_ATTACH_LONG_FILENAME属性(DASL名称http://schemas.microsoft.com/mapi/proptag/0x3707001F),但如果使用Attachment.PropertyAccessor.SetProperty设置{{1},Outlook将引发异常}}

您可以使用扩展MAPI来设置属性,但它只能在C ++或Delphi中访问,而不能在VBA或任何.Net语言中访问。您可以使用Redemption在VBA或任何.Net语言中设置它:

PR_ATTACH_LONG_FILENAME