Adding a header item with MAPI

G

Guest

Hi,

I have developed an ATL/C++ add-in that I want to add a header item to a
_MailItem before I forward the email. The idea is that I take an item out of
the inbox, modify the header and then forward it to another email address. I
see there are Redemption examples; but I do not want to use the redemption
libraries. Is there an extended MAPI example that will show me how to
accomplish this? I do not want to use any third party utilities. I have
looked for examples on the web but I do not see any.

Thanks,
Tom -
 
D

Dmitry Streblechenko

1. Read MailItem.MAPIOBJECT property
2. QI it for IMessage Extended MAPI interface
3. Call IMessage::GetIDsFromNames() passing the appropriate GUID and id
4. "Or" the retirned tag with the appropriate type (PT_STRING8)
5. Use Imessage::SetProps or HrSetOneProp to set the property with tag from
#4.

Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool
 
G

Guest

Thanks Dmitry - I will give that a try. I was using the following code
snippit but it seemed not to be working properly

IUnknownPtr pUnk = spForward->GetMAPIOBJECT();
CComQIPtr<IMAPIProp, &IID_IMAPIProp> pMAPIProp(pUnk);
ATLASSERT(pMAPIProp);
SPropTagArray ar = {0};
ULONG nProps = 0;
SPropValue *arProps = NULL;
TCHAR*szResult = NULL;

ar.cValues = 1;
ar.aulPropTag[0] = PR_TRANSPORT_MESSAGE_HEADERS;
pMAPIProp->GetProps(&ar, PT_UNSPECIFIED, &nProps, &arProps);
 
D

Dmitry Streblechenko

Setting PR_TRANSPORT_MESSAGE_HEADERS on an outgoing message won't do
anything...

Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool

Tom at GSD said:
Thanks Dmitry - I will give that a try. I was using the following code
snippit but it seemed not to be working properly

IUnknownPtr pUnk = spForward->GetMAPIOBJECT();
CComQIPtr<IMAPIProp, &IID_IMAPIProp> pMAPIProp(pUnk);
ATLASSERT(pMAPIProp);
SPropTagArray ar = {0};
ULONG nProps = 0;
SPropValue *arProps = NULL;
TCHAR*szResult = NULL;

ar.cValues = 1;
ar.aulPropTag[0] = PR_TRANSPORT_MESSAGE_HEADERS;
pMAPIProp->GetProps(&ar, PT_UNSPECIFIED, &nProps, &arProps);


Dmitry Streblechenko said:
1. Read MailItem.MAPIOBJECT property
2. QI it for IMessage Extended MAPI interface
3. Call IMessage::GetIDsFromNames() passing the appropriate GUID and id
4. "Or" the retirned tag with the appropriate type (PT_STRING8)
5. Use Imessage::SetProps or HrSetOneProp to set the property with tag
from
#4.

Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool
 
D

Dmitry Streblechenko

"Inside MAPI" is the omly MAPI book ever published - it's been out of print
for ages, but you can get it in the PDF format from
http://www.insidemapi.com
It won't cover this particular question of course :)
Otherwise just post your questions to the
microsoft.public.win32.programmer.messaging newsgroup or use the MAPI list
(http://peach.ease.lsoft.com/Archives/mapi-l.html).

Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool

Tom at GSD said:
Now it makes sense. :)

I have been looking for a book or some reference material on MAPI
programming and I have yet to find one. I have a book written by Dave
Grundgeiger; but it is very high level, uses VB and really is a CDO
reference. Do you have any book recommendations?

Thanks!



Dmitry Streblechenko said:
Setting PR_TRANSPORT_MESSAGE_HEADERS on an outgoing message won't do
anything...

Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool

Tom at GSD said:
Thanks Dmitry - I will give that a try. I was using the following code
snippit but it seemed not to be working properly

IUnknownPtr pUnk = spForward->GetMAPIOBJECT();
CComQIPtr<IMAPIProp, &IID_IMAPIProp> pMAPIProp(pUnk);
ATLASSERT(pMAPIProp);
SPropTagArray ar = {0};
ULONG nProps = 0;
SPropValue *arProps = NULL;
TCHAR*szResult = NULL;

ar.cValues = 1;
ar.aulPropTag[0] = PR_TRANSPORT_MESSAGE_HEADERS;
pMAPIProp->GetProps(&ar, PT_UNSPECIFIED, &nProps, &arProps);


:

1. Read MailItem.MAPIOBJECT property
2. QI it for IMessage Extended MAPI interface
3. Call IMessage::GetIDsFromNames() passing the appropriate GUID and
id
4. "Or" the retirned tag with the appropriate type (PT_STRING8)
5. Use Imessage::SetProps or HrSetOneProp to set the property with tag
from
#4.

Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool

Hi,

I have developed an ATL/C++ add-in that I want to add a header item
to
a
_MailItem before I forward the email. The idea is that I take an
item
out
of
the inbox, modify the header and then forward it to another email
address.
I
see there are Redemption examples; but I do not want to use the
redemption
libraries. Is there an extended MAPI example that will show me how
to
accomplish this? I do not want to use any third party utilities. I
have
looked for examples on the web but I do not see any.

Thanks,
Tom -
 
G

Guest

Thanks Dmitry - I ordered a used book.



Dmitry Streblechenko said:
"Inside MAPI" is the omly MAPI book ever published - it's been out of print
for ages, but you can get it in the PDF format from
http://www.insidemapi.com
It won't cover this particular question of course :)
Otherwise just post your questions to the
microsoft.public.win32.programmer.messaging newsgroup or use the MAPI list
(http://peach.ease.lsoft.com/Archives/mapi-l.html).

Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool

Tom at GSD said:
Now it makes sense. :)

I have been looking for a book or some reference material on MAPI
programming and I have yet to find one. I have a book written by Dave
Grundgeiger; but it is very high level, uses VB and really is a CDO
reference. Do you have any book recommendations?

Thanks!



Dmitry Streblechenko said:
Setting PR_TRANSPORT_MESSAGE_HEADERS on an outgoing message won't do
anything...

Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool

Thanks Dmitry - I will give that a try. I was using the following code
snippit but it seemed not to be working properly

IUnknownPtr pUnk = spForward->GetMAPIOBJECT();
CComQIPtr<IMAPIProp, &IID_IMAPIProp> pMAPIProp(pUnk);
ATLASSERT(pMAPIProp);
SPropTagArray ar = {0};
ULONG nProps = 0;
SPropValue *arProps = NULL;
TCHAR*szResult = NULL;

ar.cValues = 1;
ar.aulPropTag[0] = PR_TRANSPORT_MESSAGE_HEADERS;
pMAPIProp->GetProps(&ar, PT_UNSPECIFIED, &nProps, &arProps);


:

1. Read MailItem.MAPIOBJECT property
2. QI it for IMessage Extended MAPI interface
3. Call IMessage::GetIDsFromNames() passing the appropriate GUID and
id
4. "Or" the retirned tag with the appropriate type (PT_STRING8)
5. Use Imessage::SetProps or HrSetOneProp to set the property with tag
from
#4.

Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool

Hi,

I have developed an ATL/C++ add-in that I want to add a header item
to
a
_MailItem before I forward the email. The idea is that I take an
item
out
of
the inbox, modify the header and then forward it to another email
address.
I
see there are Redemption examples; but I do not want to use the
redemption
libraries. Is there an extended MAPI example that will show me how
to
accomplish this? I do not want to use any third party utilities. I
have
looked for examples on the web but I do not see any.

Thanks,
Tom -
 
D

Dmitry Streblechenko

AFAIK that's just what the SMTP provider does.
Why is this important? According to all the RFCs MIME headers are not case
sensitive.

Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool
 

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