我已编写此代码以查看Outlook邮箱中的未读项目,以下是代码:
Microsoft.Office.Interop.Outlook.Application app;
Microsoft.Office.Interop.Outlook.Items items;
Microsoft.Office.Interop.Outlook.NameSpace ns;
Microsoft.Office.Interop.Outlook.MAPIFolder inbox;
Microsoft.Office.Interop.Outlook.Application application = new Microsoft.Office.Interop.Outlook.Application();
app = application;
ns = application.Session;
inbox = ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);
items = inbox.Items;
foreach (Microsoft.Office.Interop.Outlook.MailItem mail in items)
{
if (mail.UnRead == true)
{
MessageBox.Show(mail.Subject.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
但在foreach循环中我收到此错误:
"无法将类型为'System .__ ComObject'的COM对象转换为接口类型'Microsoft.Office.Interop.Outlook.MailItem'.此操作失败,因为QueryInterface调用COM组件上的接口与IID'{00063034-0000- 0000-C000-000000000046}由于以下错误而失败:不支持此类接口(HRESULT异常:0x80004002(E_NOINTERFACE)).
你能帮我解决一下这个错误吗?
多数民众赞成我使用C#阅读电子邮件:
outLookApp.NewMailEx += new ApplicationEvents_11_NewMailExEventHandler(outLookApp_NewMailEx);
Outlook.NameSpace olNameSpace = outLookApp.GetNamespace("mapi");
olNameSpace.Logon("xxxx", "xxxxx", false, true);
Outlook.MAPIFolder oInbox = olNameSpace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
Outlook.Items oItems = oInbox.Items;
MessageBox.Show("Total : " + oItems.Count); //Total Itemin inbox
oItems = oItems.Restrict("[Unread] = true");
MessageBox.Show("Total Unread : " + oItems.Count); //Unread Items
Outlook.MailItem oMsg;
Outlook.Attachment mailAttachement;
for (int i = 0; i < oItems.Count; i++)
{
oMsg = (Outlook.MailItem)oItems.GetFirst();
MessageBox.Show(i.ToString());
MessageBox.Show(oMsg.SenderName);
MessageBox.Show(oMsg.Subject);
MessageBox.Show(oMsg.ReceivedTime.ToString());
MessageBox.Show(oMsg.Body);
Run Code Online (Sandbox Code Playgroud)
我面临的问题是此应用程序仅在Outlook在计算机上打开时才有效.如果Outlook已关闭,则会抛出异常:
服务器不可用.如果此情况仍然存在,请与管理员联系.
无论如何我可以阅读Outlook打开的电子邮件吗?