检查电子邮件地址是否开启了自动回复 (OOF)

Checking if an email address has automatic replies (OOF) turned on

我想遍历电子邮件地址列表并检查它们是否打开了 OOF(这些将是其他人的电子邮件地址)。然后如果可能检索 OOF 文本。

我尝试了通过 VBA 获取 OOF 的选项,但通过我自己的反复试验和谷歌搜索,我可以看到大多数人(和我自己)意识到只有获得您自己的 OOF 信息才有可能。

Sub Check_OOF()

    Dim oNS As Outlook.NameSpace
    Dim oStores As Outlook.Stores
    Dim oStr As Outlook.Store
    Dim oPrp As Outlook.PropertyAccessor

    Set oNS = Outlook.GetNamespace("MAPI")
    Set oStores = oNS.Stores

    For Each oStr In oStores
        If oStr.ExchangeStoreType = olPrimaryExchangeMailbox Then
            Set oPrp = oStr.PropertyAccessor
            MsgBox oPrp.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x661D000B")
        End If
    Next

End Sub

Outlook-Redemption 可以吗?我只能看到与您自己的自动回复进行交互的语法。

您将需要使用 EWS - GetMailTips operation

您也可以使用 Redemption, see RDOMailTips object 获取更多信息。

感谢尤金为我指明正确的方向,也感谢德米特里的救赎。

我通过下载 here 并通过命令行安装来安装 redemption(感谢您的清晰说明)。我正在使用 RDOMailTips 对象,它允许我遍历邮箱并检索 OOF 消息和其他有用的信息。

下面是我快速编写的示例,用于展示循环浏览电子邮件并获取 OOF 文本和 start/end 日期的基本前提。

Sub Get_OOF()

Dim session As Redemption.RDOSession
Dim arr As Variant

Set session = CreateObject("Redemption.RDOSession")
session.Logon
session.SkipAutodiscoverLookupInAD = True

 arr = Array("user1@email.com", "user2@email.com", "user3@email.com")

 For i = LBound(arr) To UBound(arr)
    Set AdrEntry = session.AddressBook.ResolveName(arr(i))
    Set mailtips = AdrEntry.GetMailTips
    Debug.Print mailtips.OutOfOfficeMessage
    Debug.Print mailtips.OutOfOfficeEndTime
    Debug.Print mailtips.OutOfOfficeStartTime
Next i

Set session = Nothing
Set AdrEntry = Nothing
Set mailtips = Nothing

End Sub

注意四点

  1. 如果此人不在办公室,它将return一个空字符串
  2. 如果此人没有设置外出日期,它将 return 01/01/4501,我认为这是一个格式为日期的错误代码
  3. 您需要从 mailtips.OutOfOfficeMessage 中拆分字符串,因为它在外出文本周围有很多格式错误
  4. 我不需要将我的凭据放入 AdrEntry.GetMailTips 的参数中就可以正常工作。但正如文档所说,这对于 EWS 是可选的。