AccessViolationException在Outlook 2007中读取电子邮件发件人

时间:2012-05-16 19:06:01

标签: c# interop outlook

当我试图通过MailItem.Sender获取电子邮件地址时,我收到了AccessViolationException。 Outlook 2007上的地址(Windows XP)。当我在Outlook 2010(Windows 7)上运行相同的代码时,我没有收到此错误。

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()

2 个答案:

答案 0 :(得分:2)

这表明您正在使用未通过早期版本的界面公开的属性 - 在Outlook 2010中添加了MailItem.Sender属性。当您针对Outlook 2007运行代码时,调用将超过对象&#39 ; s v-table,因此访问违规。

解决方法是使用MailItem.PorpertyAccessor.GetProperty读取PR_SENDER_ENTRYID MAPI属性(DASL名称http://schemas.microsoft.com/mapi/proptag/0x0C190102)并使用它来调用Namespace.GetAddressEntryFromID。

答案 1 :(得分:1)

如上所述:

  

是。我得到了一个解决方法:email.SenderEmailAddress

<强>参考