Adding recipients to existing mail Items using Redemption

B

bjornte

Hi,
I have a situation where I want to modify an existing item in Outlook,
but I cant get the recipients to work properly when using Redemption.

First I create a new mail item, add some properties (like subject,
recipients etc), get hold of the EntryID and exit.
Later on I reconnect and find the mailItem using GetItemFromID and
start modifying this Item.

Changing the Subject works just fine, but I cant seem to get the
Recipients modified correctly.
When I add a recipient it is apparently added, using OutlookSpy to
view the "CurrentItem.To" property I can see all my recipients.
However, the ones I added when I modified the Item is not visible in
Outlook and if I manually enter a new mailaddress (in Outlook), the
ones I added in the modification code disappears from the
"CurrentItem.To" property in OutlookSpy as well.

If I use Outlook directly (no Redemption code), I can get this
working, but I dont want the Security message box, so it is not really
an alternative.

I created a small sample program that demonstrates this problem:

using Outlook = Microsoft.Office.Interop.Outlook;
using Interop.Redemption;

private void main()
{
string entryID = RedemptionCreateTestMail();
RedemptionAddRecipient(entryID);
}

private string RedemptionCreateTestMail()
{
Outlook.Application olApp = new Outlook.Application();
Outlook.NameSpace olNS =
(Outlook.NameSpace)olApp.GetNamespace("MAPI");
olNS.Logon("", "", false, true);

Interop.Redemption.SafeMailItem safeItem = new
SafeMailItem();
Outlook.MailItem mailItem =
(Outlook.MailItem)olApp.CreateItem(Outlook.OlItemType.olMailItem);
safeItem.Item = mailItem;

safeItem.Recipients.Add("(e-mail address removed)");
safeItem.Recipients.ResolveAll();
mailItem.Subject = "Mail Created";
mailItem.Save();
mailItem.Display(false);

string entryID = mailItem.EntryID;

mailItem = null;
safeItem = null;
olNS.Logoff();
olNS = null;
olApp = null;

return entryID;
}

private void RedemptionAddRecipient(string entryID)
{
Outlook.Application olApp = new Outlook.Application();
Outlook.NameSpace olNS =
(Outlook.NameSpace)olApp.GetNamespace("MAPI");
olNS.Logon("", "", false, true);

string storeID =
olNS.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox).StoreID;
Outlook.MailItem mailItem =
(Outlook.MailItem)olNS.GetItemFromID(entryID, storeID);

Interop.Redemption.SafeMailItem safeItem = new
SafeMailItem();
safeItem.Item = mailItem;
safeItem.Recipients.Add("(e-mail address removed)");
safeItem.Recipients.ResolveAll();

mailItem.Subject = "Attached to mail: " + entryID;

mailItem.Save();
mailItem.Display(false);

mailItem = null;
safeItem = null;
olNS.Logoff();
olNS = null;
olApp = null;
}

Bjorn Tore
 
D

Dmitry Streblechenko

Outlook cannot see any changes made with Extended MAPI until you completely
dereference and reopen the item.
For some reason Outlook refereshes it internal cache of recipients when you
add a user property (you can immediately delete) it after you add a
recipient but before you display it.

safeItem.Recipients.Add("(e-mail address removed)");
safeItem.Recipients.ResolveAll();
prop = mailItem.UserProperties.Add( "test", 1 );
prop.Value = "test";
prop.Delete();
mailItem.Subject = "Mail Created";
mailItem.Save();
mailItem.Display(false);

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

Sue Mosher [MVP-Outlook]

Very useful. How on earth did you ever figure that out?

--
Sue Mosher, Outlook MVP
Author of Configuring Microsoft Outlook 2003

and Microsoft Outlook Programming - Jumpstart for
Administrators, Power Users, and Developers
 
D

Dmitry Streblechenko

The usual head scratching "why does this work in one place but not in
another?" :)

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

Very useful. How on earth did you ever figure that out?

--
Sue Mosher, Outlook MVP
Author of Configuring Microsoft Outlook 2003

and Microsoft Outlook Programming - Jumpstart for
Administrators, Power Users, and Developers
 

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