【问题标题】:VBA in Outlook to get "replied" or "forwarded" status of email conversation?Outlook 中的 VBA 获取电子邮件对话的“已回复”或“转发”状态?
【发布时间】:2013-02-25 13:30:09
【问题描述】:

我在 Outlook 中有一个 VBA 脚本,旨在根据项目放置在文件夹中的时间进行一些自动电子邮件处理。这按预期工作,但我试图让它更智能一点,以便脚本可以查看放入文件夹的电子邮件是否已得到回复。

目前,在将邮件放入文件夹 X 的那一刻,脚本会自动回复该电子邮件,然后将该邮件标记为未读。但是,如果邮件已被标记为“已回复”,无论脚本是否回复了邮件,或者是否有人在将邮件放入文件夹 X 之前发送了回复,我想确保脚本不会发送回复,并且简单地将邮件标记为未读。这是可以通过读取 IMAP 属性标签来完成的吗?如果是这样,我在寻找哪个标签?我一直在努力弄清楚如何做到这一点。任何帮助将不胜感激。

作为参考,这是我的脚本(删除了识别细节):

注意:我知道我有一些声明的变量但没有被引用。我稍后会用这些来做其他事情。

Option Explicit
 '##############################################
 '### all code for the ThisOutlookSession module
 '### Module level Declarations
 'expose the items in the target folder to events
Dim WithEvents ackSpamMsgs As Items
Dim WithEvents ackPhishMsgs As Items
Dim WithEvents fwdMsgs As Items
 '###############################################
Private Sub Application_Startup()
     'some startup code to set our "event-sensitive"
     'items collection
    Dim objNS As Outlook.NameSpace
    Dim ackFolder As Folder
    Dim compFolder As Folder

    Set objNS = Application.GetNamespace("MAPI")
    Set ackMsgs = objNS.Folders("Inbox").Folders("Folder X").Items
    Set fwdMsgs = objNS.Folders("Inbox").Folders("Folder Y").Items
End Sub

 '#################################################
 '### this is the ItemAdd event code
Sub ackMsgs_ItemAdd(ByVal Item As Object)
     'when a new item is added to our "watched folder"
     'we can process it
    Dim msg As MailItem
    Set msg = Item.Reply
    'This is where I want to check if the mail has been replied to, and skip the "with"
    'below if it has been replied to.
    With msg
        .Subject = "RE: " & Item.Subject
        .HTMLBody = "Body of email here"
        .Send
        Set msg.UnRead = True
    End With

End Sub

Sub fwdMsgs_ItemAdd(ByVal Item As Object)
    Dim msg As MailItem
    Dim newMsg As MailItem

    Set msg = Item.Forward
    msg.Recipients.Add ("email@email.com")
    msg.Send

End Sub

 '#################################################
Private Sub Application_Quit()

    Dim objNS As Outlook.NameSpace
    Set ackMsgs = Nothing
    Set fwdMsgs = Nothing
    Set objNS = Nothing

End Sub

【问题讨论】:

    标签: vba outlook imap


    【解决方案1】:

    你追求的属性是 PR_LAST_VERB_EXECUTED(DASL 名称是http://schemas.microsoft.com/mapi/proptag/0x10810003);您应该可以使用MailItem.PropetyAccessor.GetProperty 访问它。

    查看带有OutlookSpy 的消息 - 单击 IMessage 按钮以查看可用的 MAPI 属性。

    【讨论】:

    • 太棒了,我会试一试,让你知道结果如何!谢谢! :)
    • 事实上,这正是我所需要的。它甚至按我预期的方式运行。非常感谢,德米特里!
    猜你喜欢
    • 1970-01-01
    • 2017-10-09
    • 1970-01-01
    • 2022-06-29
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 2017-10-05
    • 2022-11-11
    相关资源
    最近更新 更多