4

当我尝试通过 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()

4

2 回答 2

2

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

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

于 2014-07-17T21:42:07.467 回答
1

如上所述:

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

参考

于 2014-07-17T19:03:39.767 回答