作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我尝试通过 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:试图读取或写入 protected 内存。 方法:get_Sender()
最佳答案
这表明您正在使用早期版本接口(interface)未公开的属性 - MailItem.Sender 属性已添加到 Outlook 2010 中。当您针对 Outlook 2007 运行代码时,调用会经过对象的 v-表,因此访问冲突。
解决方法是使用 MailItem.PorpertyAccessor.GetProperty 读取 PR_SENDER_ENTRYID MAPI 属性(DASL 名称 http://schemas.microsoft.com/mapi/proptag/0x0C190102
)并使用它来调用命名空间.GetAddressEntryFromID。
关于c# - AccessViolationException 在 Outlook 2007 中读取电子邮件发件人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10625039/
我是一名优秀的程序员,十分优秀!