I work for an MSP and we have a single mailbox that we use to process incoming email requests into our ticketing system. I have created a VBA script that runs and processes new emails and such. We are using Outlook 2010 (32-bit) and we are running on Office 365 [Exchange 2013].
We now want to automatically enable and disable an Out Of Office message on the mailbox for after hours and holidays. I already have most of the code written to check for any ongoing meetings that would enable and disable the Out of Office when the meetings start / end. This way we can setup a reoccuring meeting everyday at 5pm to turn on the OOF message and at 4am to disable it. This will also work with All Day Events (such as Holidays).
The only issue I am having is setting the actual OOF message to enable/disable and changing the message body. We would like to be able to set the message body based on the
Below are the snippets I have that get the OOF status and to enable/disable OOF based on various searches I have performed. It looks like CDO 1.21 would be the easiest way to go, but Outlook 2010 seems to not support CDO 1.21.
Acquire OOF Status
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
Enable/Disable OOF with body message
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
I'm guessing there's something to do with the 'Internal' and 'External' OOF replies that are featured in Exchange 2010, 2013.
I'm not opposed to running an external program that set OOF messages.
Any suggestions or thoughts on how I can proceed? I would hate to have to give up when I just need to find the way to disable/enable OOF!