Outlook 2007 中读取电子邮件发送者时出现“AccessViolationException”异常

4

当我尝试通过MailItem.Sender.Address在Outlook 2007(Windows XP)中获取电子邮件地址时,遇到了AccessViolationException错误。但是在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
是的,我有一个解决方法:email.SenderEmailAddress。 - Makah
2个回答

2

这表明您正在使用一个早期版本的接口未公开的属性 - MailItem.Sender属性是在Outlook 2010中添加的。当您对Outlook 2007运行代码时,调用超过了对象的虚表,因此出现了访问冲突。

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


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接