【问题标题】:Determine who has read a mail in shared mailbox确定谁已阅读共享邮箱中的邮件
【发布时间】:2015-07-20 13:37:10
【问题描述】:

我正在考虑确定阅读了 Outlook 2010 共享邮箱中的邮件。

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

我的第一个想法:

使用 VBA 宏收听 MailItem.Read()MailItem.Open(),但是 - 如果我没记错的话 - 当 MailItem 聚焦 并显示在阅读窗格中时会抛出 MailItem.Open()。如果 Outlook 没有自动将其标记为已读,则“Max Read by Max”信息将是错误的。 MailItem.Read() 仅在将 MailItem 打开到新窗口时抛出,但是当我按下 Ctrl+Enter 时会发生什么?

经过一些谷歌搜索后,VBA 似乎无法很好地解决这个问题,或者是吗? 我应该考虑编写插件吗?

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

【问题讨论】:

    标签: vb.net vba email outlook collaboration


    【解决方案1】:

    那是个坏主意 - 现在您需要在用户所做的所有事情都已阅读该消息时修改该消息。这将自动更新上次修改的时间/名称/条目ID。

    请记住,已读/未读状态在技术上不是消息的一部分,因此重置它不会修改消息。不仅如此,PF 存储还存储每个用户的已读/未读状态。

    【讨论】:

    • 消息中没有 bool MailItem.UnRead 吗?为什么最后修改时间等相关?
    • 我会说,我唯一要寻找的是被通知,当通过我的 Outlook 阅读邮件并且当另一个邮箱用户阅读邮件时收到通知。
    • 是的,未读是 Outlook 对象模型中 MailItem 对象的一部分,但在存储级别,该属性与其他邮件属性(例如主题)分开存储。修改该属性不会重置修改日期。
    • 您可以在该文件夹上使用 Items.ItemChange 事件 - 当项目被修改或未读状态发生变化时,它会被调用。但您不会知道究竟是谁导致该项目被读取。
    • 您可以使用 MailItem.PropertyChange 事件 - 它只会在进行更改的机器上为 Unread 属性触发。要订阅当前用户可以修改的所有项目的事件,您需要监听 Explorer.SelectionChange 事件和 Inspectors.NewInspector 事件。
    【解决方案2】:

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

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

    如果您需要处理项目级事件,您可能会发现 Developing an Inspector Wrapper for Outlook 2010 文章很有帮助。

    【讨论】:

    • 感谢您的全面回答。也许这是一个愚蠢的问题,但我不确定的是,这些事件是否仅在 更改属性或其他同事更改属性时触发?
    • 在这两种情况下都会触发该事件。你不会知道是谁造成了变化。
    • 将对所有用户进行更改,因此当任何人更改 Outlook 项目时,您都会触发事件。
    猜你喜欢
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 1970-01-01
    相关资源
    最近更新 更多