2012-05-16 60 views
4

当我试图通过MailItem.Sender获取电子邮件地址时,出现AccessViolationException。 Outlook 2007(Windows XP)上的地址。当我在Outlook 2010(Windows 7)上运行相同的代码时,我不会收到此错误。AccessViolationException读取Outlook 2007中的电子邮件发件人

Outlook.MailItem email = inbox.Items[i] as Microsoft.Office.Interop.Outlook.MailItem; 
Outlook.MailItem email 
Console.WriteLine("Subject: " + email.Subject); 
Console.WriteLine("Sender: " + email.Sender); <-- Exception Here! 
Console.WriteLine("Addr: " + email.Sender.Address); 

控制台: 错误:System.AccessViolationException:尝试读取或写入受保护的内存。 方法:get_Sender()

+0

你有没有找到解决这个问题的办法?谢谢 – Fabske

+2

是的。我有一个解决方法:email.SenderEmailAddress – Makah

回答

2

这是您使用的属性不被暴露的指示早期版本的接口 - MailItem.Sender属性被添加到Outl中ook 2010.当您针对Outlook 2007运行代码时,该调用会越过对象的v-表,从而导致访问冲突。

的解决办法是使用阅读的MailItem.PorpertyAccessor.GetProperty MAPI PR_SENDER_ENTRYID属性(DASL名http://schemas.microsoft.com/mapi/proptag/0x0C190102),并用它来打电话Namespace.GetAddressEntryFromID。

相关问题