Outlook 中的 VBA 获得“回复"或“转发"电子邮件对话的状态? [英] VBA in Outlook to get "replied" or "forwarded" status of email conversation?

查看:53
本文介绍了Outlook 中的 VBA 获得“回复"或“转发"电子邮件对话的状态?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have a VBA script in outlook that is designed to do some automatic email handling based on when items are placed in folders. That works as intended, but I'm trying to make it a little more intelligent so the script can see whether or not the email being placed into the folder has been replied to.

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

Currently, the moment a mail is placed in folder X, the script sends an automatic reply to the email and then marks the mail as unread. However if a mail has already been flagged as "replied", regardless of if the script replied to the mail or if someone sent a reply before placing the mail into folder X, I want to make sure the script does NOT send a reply, and simply marks the mail as unread. Is this something that's possible to do by reading IMAP property tags? If so, which tag am I looking for? I've been struggling to figure out how to accomplish this. Any help would be appreciated.

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

For reference, here's the script I have (with identifying details removed):

注意:我知道我有一些声明的变量但没有被引用.稍后我会将这些用于其他用途.

Note: I am aware I have some declared variables but not referenced. I'm going to use these later for something else.

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

推荐答案

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

The property you are after is PR_LAST_VERB_EXECUTED (DASL name is http://schemas.microsoft.com/mapi/proptag/0x10810003); you should be able to access it using MailItem.PropetyAccessor.GetProperty.

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

Take a look at a message with OutlookSpy - click IMessage button to see the available MAPI properties.

这篇关于Outlook 中的 VBA 获得“回复"或“转发"电子邮件对话的状态?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆