View Single Post
  #2  
Old July 24th 09, 05:32 PM posted to microsoft.public.office.developer.outlook.vba,microsoft.public.outlook.program_vba
Dmitry Streblechenko
external usenet poster
 
Posts: 2,116
Default CDO hanging on Logoff

Most likely you still live MAPI objects used by CDO object at the time when
you call Logoff.
Does it owkr if you only have calls to Logon and Logoff with nothign in
between?
Try to to all CDO handling code into a separate sub:

Set objCDOSession = CreateObject("MAPI.Session")
objCDOSession.Logon...
DoCDOStuff(objCDOSession)
objCDOSession.Logoff

This way all implecit variables (such as thouse created when yo uuse
multiple dot notation) will be released when the DoCDOStuff sub above exits.

--
Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool
-
"Matt Williamson" wrote in message
...
I can't figure out why the CDO session is hanging on Logoff for the
following code. I've read about the bug he
http://support.microsoft.com/?kbid=177630 I've tried many different
variations but the results are the same. It was running fine using the
Outlook object model but I wanted to Delete without dumping into my Deleted
items or moving it to the journal box deleted items and emptying it
afterwards so I added the CDO bit. I've obviously changed the params for
the DN of the exchange server for this post. I'm running Outlook 2003 sp2
with Exchange 2003 sp2. Does it make any difference that I'm opening the
Journal mailbox in addition to my mailbox? It hangs if I skip logoff and
set objCDOSession=Nothing too.

Sub ClearInbox_Journal()

On Error GoTo ClearInbox_Error

Dim objItem As MailItem, objItems As Outlook.Items
Dim objItemsRestrict As Outlook.Items
Dim objInboxFolder As Outlook.MAPIFolder
Dim objDeletedFolder As Outlook.MAPIFolder
Dim objCDO As MAPI.Message
Dim objCDOSession As MAPI.Session
Dim sEntryID As String
Dim sStoreID As String
Dim objNS As Outlook.NameSpace
Dim x As Long, i As Long, dCurrent As Date
Dim dDateFilter As Date, sServerDName As String

dCurrent = Now()
dDateFilter = DateAdd("d", -3, dCurrent)

sServerDName =
"/o=MYORG/ou=MYOU/cn=Configuration/cn=Servers/cn=MYSERVER"

Set objNS = Application.GetNamespace("MAPI")
Set objCDOSession = CreateObject("MAPI.Session")
objCDOSession.Logon "", "", False, False, , True, sServerDName & vbLf &
vbLf & "anon"
Set objInboxFolder = objNS.Folders("Mailbox -
Journal").Folders("Inbox")
'Set objDeletedFolder = objNS.Folders("Mailbox -
Journal").Folders("Deleted Items")
Set objItems = objInboxFolder.Items
objItems.Sort "[ReceivedTime]", True
Set objItemsRestrict = objItems.Restrict("[ReceivedTime] '" &
Format(dDateFilter, "ddddd h:nn AMPM") & "'")

For x = objItemsRestrict.Count To 1 Step -1
DoEvents
Set objItem = objItemsRestrict.item(x)
If Not objItem Is Nothing Then
sEntryID = objItem.EntryID
sStoreID = objItem.Parent.StoreID
Set objCDO = objCDOSession.GetMessage(sEntryID, sStoreID)
If Not objCDO Is Nothing Then
objCDO.Delete
End If
End If
Next

objCDOSession.Logoff
Set objCDOSession = Nothing
Set objItem = Nothing
Set objItems = Nothing
Set objCDO = Nothing
Set objInboxFolder = Nothing
Set objNS = Nothing

On Error GoTo 0
Exit Sub

ClearInbox_Error:

MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure
" & _
"ClearInbox_Journal"

End Sub


TIA

Matt



Ads