Header from Outlook Rule

S

Steve A.

Greetings

I want to access message.fields to search the internet headers for a message.
I'm using code I have found on the net, and don't understand MAPI or CDO
very well.


I believe the The code fails at GetMessage becuse the objSession is not
initialised properly: Any suggestions?
I have
Function GetCDOItemFromOL(objOLItem As Object) As MAPI.Message
Dim objSession As MAPI.Session
Dim objApp As Outlook.Application
Dim strEntryID As String
Dim strStoreID As String
Set objApp = CreateObject("Outlook.Application")
strEntryID = objOLItem.EntryID
strStoreID = objOLItem.Parent.StoreID
objSession = CreateObject("MAPI.Session")
objSession.Logon , , False, False
Set GetCDOItemFromOL = objSession.GetMessage(strEntryID, strStoreID)
objSession.Logoff
Set objSession = Nothing
End Function

Sub RuleScript(MyMail As MailItem)

Dim strID As String
Dim olNS As Outlook.NameSpace
Dim olMail As Outlook.MailItem

Dim objCDOMsg As MAPI.Message


Dim InternetHeaders As String
Const CdoPR_TRANSPORT_MESSAGE_HEADERS = &H7D001E

Set objCDOMsg = GetCDOItemFromOL(MyMail)
InternetHeaders = objCDOMsg.Fields(CdoPR_TRANSPORT_MESSAGE_HEADERS)
MsgBox "Mail message arrived Internet Headers Are : " & InternetHeaders
Set objCDOMsg = Nothing
Set olMail = Nothing
Set olNS = Nothing
End Sub
 
M

Michael Bauer

Am Thu, 18 May 2006 16:59:02 -0700 schrieb Steve A.:

Please don´t call InternetHeaders, but InternetHeaders.Value. Why do you
know that 'objSession is not initialised properly'?
 
S

Steve A.

Michael, thnaks for your assistance.

Function GetCDOItemFromOL shows message 42 but not 52 ( see msgbox code
below)
There is no exception or error message but I presume the function silently
returns because
objSession = CreateObject("MAPI.Session")
causes an error

MsgBox "Mail message arrived 42"
objSession = CreateObject("MAPI.Session")
MsgBox "Mail message arrived 52"
 
S

Steve A.

Michael
On Error GoTo eh
eh:
If Err.Number <> 0 Then
MsgBox "Connection error: " & Err.Number & " " & Err.Description
Err.Clear
Exit Function
End If

Gives the following message
Connection error: 91 Object variable or With block variable not set
 
M

Michael Bauer

Am Thu, 18 May 2006 23:23:01 -0700 schrieb Steve A.:

ok, I assume that you don´t have CDO installed. It´s an optional package
from your Outlook or Office CD.
 
S

Steve A.

Michael thanks you but

Visual Basic Tools -> References includes Micrososft CDO 1.21 Library which
is ticked and
CDO.DLL is on my system , so I think this means that it is installed.
 
M

Michael Bauer

Am Fri, 19 May 2006 01:55:02 -0700 schrieb Steve A.:

The last thing I could think of why CreateObject("MAPI.Session") fails is
that there´s some kind of a script blocker (Norton Anti Virus)?
 
S

Steve A.

Michael, Thanks once again but the script runs. The error message I have
discovered is

Connection error: 91 Object variable or With block variable not set

regards
Steve
 
M

Michael Bauer

Am Fri, 19 May 2006 05:46:01 -0700 schrieb Steve A.:


Autsch, hopefully nobody else has seen this thread :)

For objects you must use the Set statement:

Set objSession = CreateObject("MAPI.Session")
 
S

Steve A.

Michael thanks for your help.

There was another critical error in the code as well. The inclusion of error
handling helped flush it out. The other error was a call to objSession.Logoff

The code that works for me is show below. The only problem now being the
pop-up dialog "A program is trying to access e-mail addresses you have stored
in outlook. Do you want to allow this?"

Regards Steve A

Code for retrieving internet headers in an Outlook Rule:

Function GetCDOItemFromOL(objOLItem As Object) As MAPI.Message
Dim objSession As MAPI.Session
Dim objApp As Outlook.Application
Dim strEntryID As String
Dim strStoreID As String

On Error GoTo eh

Set objApp = CreateObject("Outlook.Application")
strEntryID = objOLItem.EntryID
strStoreID = objOLItem.Parent.StoreID
Set objSession = CreateObject("MAPI.Session")
objSession.Logon , , False, False

Set GetCDOItemFromOL = objSession.GetMessage(strEntryID, strStoreID)

'objSession.Logoff <==> WAS AN ERROR
Set objSession = Nothing
Exit Function
eh:
If Err.Number <> 0 Then
MsgBox "Connection error: " & Err.Number & " " & Err.Description
Err.Clear
Exit Function
End If

End Function

Sub RuleScript(MyMail As MailItem)
Dim objCDOMsg As MAPI.Message
Dim InternetHeaders As String
Const CdoPR_TRANSPORT_MESSAGE_HEADERS = &H7D001E
Set objCDOMsg = GetCDOItemFromOL(MyMail)
InternetHeaders = objCDOMsg.Fields(CdoPR_TRANSPORT_MESSAGE_HEADERS).Value
MsgBox "Mail message arrived Internet Headers Are : " & InternetHeaders
Set objCDOMsg = Nothing
End Sub
 
M

Michael Bauer

Am Sat, 20 May 2006 17:42:01 -0700 schrieb Steve A.:

If an object variable isn´t set then, of course, trying to access that
object´s methods fails, too.

Because the message header contains e-mail addresses it´s blocked. A good
page that lists all infos about that is www.outlookcode.com/d/sec.htm

For getting the header without that dialog I´d recommend the Redemption from
www.dimastr.com
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top