您好我正在处理C#应用程序,我正在尝试从Outlook收件箱中读取邮件。 我正在使用VS2010和MS-Office 2007,我在visual studio中添加了引用,应用程序在我的系统中工作正常,但是当我在客户端系统中运行相同的应用程序时,它抛出COM异常,
异常消息就像这样
无法将System_ComObject类型的COM对象强制转换为InterfaceType“Microsoft.Office.Interop.Outlook.MailItem”。此操作失败,因为ID为{00063034-0000-0000-C000-00000000046}的接口的Com组件上的QueryInterface调用因以下错误而失败。没有这样的接口支持(来自HRESULT的异常:0x80004002) (E_NONINTERFACE)
我在尝试访问 MailItem ex代码时遇到异常: subject =((Microsoft.Office.Interop.Outlook.MailItem)myInbox.Items [i])。主题; 我在安装了VS2010的3到4个系统中进行了测试,其中抛出异常的客户端系统中没有包含vs2010,但是.net 4.0框架,ms-office 2007安装在客户端系统中。
可能是什么错误? 任何建议PLZ .. 提前谢谢..
答案 0 :(得分:0)
这里有两个错误 - 并非收件箱中的所有项目都是MailItem类型,其次主题可以为null;所以正确的代码应如下所示:
using Microsoft.Office.Interop.Outlook;
var myApp = new Application();
NameSpace mapiNameSpace = myApp.GetNamespace("MAPI");
MAPIFolder myInbox = mapiNameSpace.GetDefaultFolder(OlDefaultFolders.olFolderInbox);
mapiNameSpace.SendAndReceive(false);
if (myInbox.Items.Count > 0) {
for (var i = 1; i < myInbox.Items.Count; i++) {
string subject;
var mailItem = myInbox.Items[i] as MailItem;
if (mailItem != null) {
subject = mailItem.Subject;
if (!string.IsNullOrEmpty(subject)) {
subject = subject.Replace('\'', '\"');
}
}
}
}
最重要的一行是
var mailItem = myInbox.Items[i] as MailItem;
if (mailItem != null) {
...
和
if (!string.IsNullOrEmpty(subject)) {
...