当我试图通过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()
答案 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)