我在一家 MSP 工作,我们有一个邮箱,用于处理传入票务系统的电子邮件请求。我创建了一个 VBA 脚本,用于运行和处理新电子邮件等。我们正在使用Outlook 2010(32 位)我们正在Office 365 [Exchange 2013]。
我们现在想要在下班后和节假日自动启用和禁用邮箱中的外出消息。我已经编写了大部分代码来检查是否有任何正在进行的会议,这些会议将在会议开始/结束时启用和禁用外出消息。这样,我们可以每天下午 5 点设置一个重复的会议来打开 OOF 消息,并在凌晨 4 点禁用它。这也适用于全天活动(例如节假日)。
我遇到的唯一问题是设置实际的 OOF 消息以启用/禁用并更改消息正文。我们希望能够根据
以下是我根据执行的各种搜索获取 OOF 状态和启用/禁用 OOF 的代码片段。看起来 CDO 1.21 是最简单的方法,但 Outlook 2010 似乎不支持 CDO 1.21。
取得 OOF 身份
Private Function QOA_GetOOFStatus()
Dim oNS As Outlook.NameSpace
Dim oStores As Outlook.Stores
Dim oStr As Outlook.Store
Dim oPrp As Outlook.PropertyAccessor
Dim OOFStatus As Boolean
OOFStatus = False
Set oNS = Application.GetNamespace("MAPI")
Set oStores = oNS.Stores
For Each oStr In oStores
If oStr.ExchangeStoreType = olPrimaryExchangeMailbox Then
Set oPrp = oStr.PropertyAccessor
OOFStatus = oPrp.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x661D000B")
End If
Next
tempValue = OOFStatus
QOA_GetOOFStatus = OOFStatus
End Function
启用/禁用 OOF 正文消息
Const PR_OOF_STATE = "http://schemas.microsoft.com/mapi/proptag/0x661D000B"
Dim oStore As Outlook.Store, oProp As Outlook.PropertyAccessor
Dim oStorageItem As Outlook.StorageItem
Set oStorageItem = Application.Session.GetDefaultFolder(olFolderInbox).GetStorage("IPM.Note.Rules.OofTemplate.Microsoft", olIdentifyByMessageClass)
oStorageItem.Body = "I am out of the office!"
oStorageItem.Save
For Each oStore In Session.Stores
If oStore.ExchangeStoreType = olPrimaryExchangeMailbox Then
Set oProp = oStore.PropertyAccessor
oProp.SetProperty PR_OOF_STATE, True
End If
Next
Set olkIS = Nothing
Set olkPA = Nothing
我猜测这与 Exchange 2010、2013 中的“内部”和“外部”OOF 回复有关。
我并不反对运行设置 OOF 消息的外部程序。
关于我该如何继续,有什么建议或想法吗?我讨厌在需要找到禁用/启用 OOF 的方法时放弃!
答案1
我决定使用远程控制实用程序并创建一个外部 powershell 脚本,将我的 AppointmentItem 正文传递进去以设置消息。远程控制实用程序将使用 EWS 设置外出办公。