Vb.net 确定谁已阅读共享邮箱中的邮件

Vb.net 确定谁已阅读共享邮箱中的邮件,vb.net,vba,email,outlook,collaboration,Vb.net,Vba,Email,Outlook,Collaboration,我正在考虑是否有可能确定谁在Outlook 2010上读过共享邮箱中的邮件 当然,邮件项不包含像“readBy”这样的属性,这就是为什么我在寻找一种方法来响应消息被标记为已读的事实。然后我可以将当前用户名写入用户定义的字段 我的第一个想法: 使用VBA宏收听MailItem.Read()或MailItem.Open(),但是-如果我没记错的话-MailItem.Open()会在邮件项目被聚焦并显示在阅读窗格中时抛出。如果Outlook未将其标记为自动读取,则“由Max读取”的信息将是错误的。 M

我正在考虑是否有可能确定谁在Outlook 2010上读过共享邮箱中的邮件

当然,邮件项不包含像“readBy”这样的属性,这就是为什么我在寻找一种方法来响应消息被标记为已读的事实。然后我可以将当前用户名写入用户定义的字段

我的第一个想法:

使用VBA宏收听
MailItem.Read()
MailItem.Open()
,但是-如果我没记错的话-
MailItem.Open()
会在邮件项目被聚焦并显示在阅读窗格中时抛出。如果Outlook未将其标记为自动读取,则“由Max读取”的信息将是错误的。
MailItem.Read()

在谷歌搜索之后,VBA似乎无法以一种好的方式解决这个问题,是吗? 我应该考虑写一个外接程序吗


你知道我该怎么做吗?任何想法都将不胜感激。

Outlook对象模型提供了当父对象实例的显式内置属性(例如,Subject)发生更改时触发的事件

当指定集合中的项发生更改时,还会激发Items类的事件。您可以检查作为参数传递的Outlook项目的Read属性


如果您需要处理项目级事件,您可能会发现本文很有用

这不是个好主意-现在你需要修改当用户所做的只是阅读消息时。这将自动更新上次修改的时间/名称/条目id


请记住,从技术上讲,已读/未读状态不是消息的一部分,因此重置它不会修改消息。除此之外,PF store还按每个用户存储已读/未读状态。

感谢您的全面回答。也许这是个愚蠢的问题,但我不确定的是,这些事件是仅在我更改属性时触发,还是在其他同事更改属性时触发?这两种情况下都会触发。您不知道是谁导致了更改。更改将针对所有用户进行,因此当任何人更改Outlook项目时,您将触发事件。邮件中是否有bool MailItem.UnRead?为什么上次修改的时间等与此相关?我想说的是,我搜索的唯一内容是当我通过Outlook阅读邮件时被点点头,而当另一个邮箱用户阅读邮件时不会被通知。是的,在Outlook对象模型中,未读是MailItem对象的一部分,但在存储级别上,该属性与其他消息属性(如主题)分开存储。修改该属性不会重置修改日期。您可以在该文件夹上使用Items.ItemChange事件-当项目被修改或其未读状态更改时,会调用该事件。但您不知道是谁导致该项被读取。您可以使用MailItem.PropertyChange事件-它将仅在进行更改的计算机上为未读属性激发。要订阅当前用户可以修改的所有项目上的事件,您需要收听Explorer.SelectionChange事件和Inspectors.NewInspector事件。