| Platform SDK: Exchange Server |
The following sample script ships with Microsoft Exchange Server version 5.5 and above. It contains the four basic functions Folder_OnMessageCreated, Message_OnChange, Folder_OnMessageDeleted, and Folder_OnTimer.
Each of these event functions calls two support functions: first GetEventDetails, and then MakeResponseMessage, as described in the following sections.
In addition to error checking, the function GetEventDetails performs the following steps:
In addition to error checking, the function SendResponseMessage prepares and sends a response message that reports the number of messages in the monitored folder. For this, it uses the CDO response object in the call msgResponse.Send.
<SCRIPT Language="VBScript">
'---------------------------------------------------------------------
' THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY
' OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING
' BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY
' AND/OR FITNESS FOR A PARTICULAR PURPOSE.
'
' Copyright (c) Microsoft Corporation 1993-1998. All rights reserved.
'---------------------------------------------------------------------
Option Explicit
'---------------------------------------------------------------------
' Global Variables
'---------------------------------------------------------------------
Dim g_bstrDebug ' debug string
Dim g_CdoPR_CONTENT_COUNT
g_CdoPR_CONTENT_COUNT = &H36020003 ' message count in Folder
'---------------------------------------------------------------------
' Event Handlers
'---------------------------------------------------------------------
' DESCRIPTION: This event is fired when a new message is added to the folder
Public Sub Folder_OnMessageCreated
Call DebugAppend(vbCrLf & "COUNTERV - Folder_OnMessageCreated",False)
Call SendResponseMessage("A New Message Was Created")
Script.Response = g_bstrDebug
End Sub
' DESCRIPTION: This event is fired when a message in the folder is changed
Public Sub Message_OnChange
Call DebugAppend(vbCrLf & "COUNTERV - Message_OnChange",False)
Call SendResponseMessage("A Message has Changed")
Script.Response = g_bstrDebug
End Sub
' DESCRIPTION: This event is fired when a message is deleted from the folder
Public Sub Folder_OnMessageDeleted
Script.Response = vbCrLf & "COUNTERV - Folder_OnMessageDeleted"
End Sub
' DESCRIPTION: This event is fired when the timer on the folder expires
Public Sub Folder_OnTimer
Script.Response = vbCrLf & "COUNTERV - Folder_OnTimer"
End Sub
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'
'
'---------------------------------------------------------------------
' Name: SendResponseMessage
' Area: Application
' Desc: Get the various CDO objects and send a message
' Parm: bstrSubject - text to send in the subject of the message
'---------------------------------------------------------------------
Private Sub SendResponseMessage(bstrSubject)
On Error Resume Next
Dim CDOSession ' Session Object
Dim oMsg ' Message Object
Dim oFolder ' Current Folder Object
Dim oFolderOutbox ' Outbox for session
Dim oMsgTarget ' Target Msg Object
Dim oRec ' Recipients Container Object
Dim iMsgCount ' Message count
Set CDOSession = EventDetails.Session ' get CDO session from
' EventDetails intrinsic obj
Call DebugAppend("EventDetails.Session",True)
Set oFolderOutbox = CDOSession.Outbox ' get session outbox
Call DebugAppend("CDOSession.Outbox",True)
' Now we fetch the folder using the FolderID passed to us
' in the EventDetails object.
Set oFolder = CDOSession.getFolder(EventDetails.FolderID,Null)
Call DebugAppend("CDOSession.getFolder()",True)
' Get the binding message using the MessageID passed to us
' in the EventDetails object
set oMsgTarget = CDOSession.GetMessage(EventDetails.MessageID,Null)
Call DebugAppend("CDOSession.GetMessage()",True)
' Get the number of messages in the event source folder
iMsgCount = oFolder.Fields(g_CDO_PR_CONTENT_COUNT)
Call DebugAppend("oFolder.Fields(g_CDO_PR_CONTENT_COUNT)",True)
' Create Message in Outbox
Set oMsg = OFolderOutbox.Messages.Add(CStr(bstrSubject), _
"There are now " & CStr(iMsgCount) & " messages in " & oFolder.Name )
Call DebugAppend("Outbox.Messages.Add",True)
Set oRec = oMsg.Recipients
oRec.Add "", "", 1, oMsgTarget.Sender.ID
oRec.Resolve(False)
If oRec.Resolved = True Then
oMsg.Send
If err.number <> 0 Then
Call DebugAppend("oMsg.send",True)
Else
Call DebugAppend("Message sent",False)
End If
Else
Call Debug.Append("Recipient.Resolve",True)
End If
End Sub
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'
'
'---------------------------------------------------------------------
' Name: DebugAppend
' Area: Debug
' Desc: Appends passed string to global string buffer. Checks for error
' with ErrChkFlag set to True. If found, appends Error info as well
' Parm: String text, Bool ErrorFlag
'---------------------------------------------------------------------
Private Sub DebugAppend(bstrParm, boolErrChkFlag)
if boolErroChkFlag = True Then
if err.number <> 0 Then ' check for COM error
g_bstrDebug = g_bstrDebug & bstrParm & "Failed: " _
& CStr(err.number) & ":" & CStr(err.description) & vbCrLf
err.clear
End If
Else
g_bstrDebug = g_bstrDebug & bstrParm & vbCrLf
End If
End Sub
</SCRIPT>