'-----------------------------------------------------------------------------------------
' Deloof.vbs - This sample shows how to walk through hidden items in a mailbox and delete
' the OOF templates and turn off OOF.
'
' This is a sample and is not intended to be used in a production environment.
' This script needs to be run from a 32 bit command line using cscript on a box with CDO 1.21 installed.
' The account running the code needs permission to the mailbox it will access.
'
' 9/19/08 danba - changed sample to include 6 message class tests.
' 9/23/08 danba - changed logic for TDX OOF Rules - PidTagRuleMsgName may not always be set.
' 10/24/08 sgriffin - minor scrub to formatting
'-----------------------------------------------------------------------------------------
Private Function RunIt(sServerName, sMailbox) 'As Boolean
Dim objsession ' MAPI.Session
Dim objInbox ' MAPI.Folder
Dim objHidden ' MAPI.Messages
Dim objMsgFilter ' MAPI.MessageFilter
Dim objOneMessage ' MAPI.Message
Dim sMessageClass ' String ' Message Class of rule
Dim s_ptagRuleMsgProvider ' String ' Provider of rule
Dim s_ptagRuleMsgName ' String ' Rule name
Dim sFoundMessage ' String ' Holds a message describing what was found.
Dim bDelete ' Boolean ' Used to indicate if an item should be deleted.
Dim iHidden ' Integer ' Use to loop through hidden items
wscript.echo "-------------------------"
wscript.echo "Time: " & Now
Set objsession = CreateObject("MAPI.session")
objsession.Logon "", "", False, False, 0, True, sServerName & vbLf & sMailbox
wscript.echo "Login completed on mailbox " & sMailbox & " on server" & sServerName
Set objInbox = objsession.Inbox
wscript.echo "Looking at the Inbox"
Set objHidden = objInbox.HiddenMessages
wscript.echo "Looking at the Hidden Items"
' --- Now we have the Hidden messages Set. Let's work thru the Hidden Messages and delete the 'oof items'
For iHidden = objHidden.Count To 1 Step -1 ' Walk Hidden backward one time
bDelete = false
sDeleteMessage = ""
Set objOneMessage = objHidden.Item(iHidden)
sMessageClass = objOneMessage.Type
On Error Resume Next
s_ptagRuleMsgProvider = ""
s_ptagRuleMsgName = ""
s_ptagRuleMsgProvider = objOneMessage.Fields(&H65EB001E) ' PidTagRuleMsgProvider
s_ptagRuleMsgName = objOneMessage.Fields(&H65EC001E) ' PidTagRuleMsgName
sFoundMessage = "Class: """ & sMessageClass & """"
if s_ptagRuleMsgName <> "" Then sFoundMessage = sFoundMessage & " Name: """ & s_ptagRuleMsgName & """"
if s_ptagRuleMsgProvider <> "" Then sFoundMessage = sFoundMessage & " Provider: """ & s_ptagRuleMsgProvider & """"
' TODO: comment out line below if you don't wish to what was found
Wscript.echo " Found: " & sFoundMessage
If sMessageClass = "IPM.Rule.Message" Then
If s_ptagRuleMsgProvider = "Microsoft Exchange OOF Assistant" AND _
s_ptagRuleMsgName = "Microsoft.Exchange.OOF.InternalSenders.Global" Then
bDelete = true
End If
If s_ptagRuleMsgProvider = "MSFT:TDX OOF Rules" Then
bDelete = true
End If
If s_ptagRuleMsgProvider = "Microsoft Exchange OOF Assistant" AND _
s_ptagRuleMsgName = "Microsoft.Exchange.OOF.AllExternalSenders.Global" Then
bDelete = true
End If
End If
If sMessageClass = "IPM.Note.Rules.OofTemplate.Microsoft" Then
bDelete = true
End If
If sMessageClass = "IPM.Note.Rules.ExternalOofTemplate.Microsoft" Then
bDelete = true
End If
If sMessageClass = "IPM.ExtendedRule.Message" Then
If s_ptagRuleMsgProvider = "Microsoft Exchange OOF Assistant" AND _
s_ptagRuleMsgName = "Microsoft.Exchange.OOF.KnownExternalSenders.Global" Then
bDelete = true
End If
End If
If bDelete = true Then
objHidden.Item(iHidden).Delete ' TODO: Comment-out if testing
wscript.echo " Deleted: " & sFoundMessage
End If
Next
objsession.OutOfOffice = 0 ' Turn off OOF ' TODO: Comment-out if testing
objsession.Logoff
Set objOneMessage = Nothing
Set objInbox = Nothing
Set objsession = Nothing
wscript.echo "Finished"
wscript.echo "-------------------------"
RunIt = True
Return
End Function
Dim bRet
If Wscript.Arguments.Count = 2 Then
sServerName = Wscript.Arguments(0)
sMailbox = Wscript.Arguments(1)
bRet = RunIt(sServerName, sMailbox)
Else
Wscript.Echo "deloof.vbs usage: deloof.vbs <Exchange Server Name> <Mail Box>"
Wscript.Echo "example: cscript deloof.vbs MyServer somebody@contoso.com"
End If
|