Exception thrown on MailItem.Send

B

bstrum

I am getting an exception thrown with our c# outlook addon installed on one
machine running Office 2003. The exception is thrown when I try to call Send
on a mail item that I have programatically created. The code looks like this:

Note: This code uses late binding.

// -- in the Item_Send event --
MSOutlook.MailItem mi; // assume initialized from the Item_Send argument

// create the new mail item that will be programatically sent
object otmp = mi.Application.CreateItem(MSOutlook.OlItemType.olMailItem);
MSOutlook.MailItem m = (MSOutlook.MailItem)MO.COMWrapper.Wrap(
otmp,
typeof(MSOutlook.MailItem));
m.BodyFormat = MSOutlook.OlBodyFormat.olFormatHTML;
m.To = mi.To;
m.Subject = "Some subject";
m.Body = "Test Body";
m.Save();
m.Send(); // throws exception on one client computer

The actual exception thrown is
"Exception has been thrown by the target of an invocation."

I have tried everything I can to duplicate the exception in our test
environment to no avail. Any ideas why something as simple as this would
throw an exception?

Thank you,

Ben Strum
ThinkTron Corporation
 
S

Sue Mosher [MVP-Outlook]

Try calling Recipients.ResolveAll and perform the send only if it returns True.

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

and Microsoft Outlook Programming - Jumpstart for
Administrators, Power Users, and Developers
http://www.outlookcode.com/article.aspx?id=54
 
B

bstrum

The ResolveAll call is returning false on this one machine so the email does
not go out. Why would this happen? How can I get around this? I am sure
that the email address specified is valid and even if it is not, so what?

Lastly, is there a way to duplicate this in a test environment? Getting a
fix for this is really slow because it only happens on this one machine at a
client site.

Thank you,

-Ben
 
S

Sue Mosher [MVP-Outlook]

This is not an appropriate way to copy recipients:

m.To = mi.To;

There is no guarantee that the display names, which is what To shows, will resolve to valid addresses. Instead, you need to iterate the mi.Recipients collection and use m.Recipients.Add to create a new Recipient based on the information from the original item.

To test, use one or more recipients whose display names are radically different from their actual email addresses.
--
Sue Mosher, Outlook MVP
Author of Configuring Microsoft Outlook 2003

and Microsoft Outlook Programming - Jumpstart for
Administrators, Power Users, and Developers
http://www.outlookcode.com/article.aspx?id=54

bstrum said:
The ResolveAll call is returning false on this one machine so the email does
not go out. Why would this happen? How can I get around this? I am sure
that the email address specified is valid and even if it is not, so what?
 
Top