使用 Outlook api 打开电子邮件时抛出错误

发布于 2024-11-18 07:38:35 字数 964 浏览 1 评论 0原文

问题:当我使用 Outlook API 打开电子邮件时,打开看似有效的 .MSG 文件时收到以下错误消息:

无法转换 COM 对象类型 “System.__ComObject”到接口类型 'Microsoft.Office.Interop.Outlook.MailItem'。 此操作失败,因为 COM 上的 QueryInterface 调用 IID 接口组件 '{00063034-0000-0000-C000-000000000046}' 由于以下错误而失败:否 支持此类接口(异常 来自 HRESULT:0x80004002 (E_NOINTERFACE))。

MSG 文件在 Outlook 中可以正常打开,并且我确信这些表单是标准的 Outlook 邮件表单。

导致此错误的最可能原因是什么?


背景: 我的一位同事从 Exchange 中将大量邮箱导出为 PST,然后针对 PST 文件运行一个工具来生成类似于填充了 .MSG 的原始邮箱的文件结构文件。例如:

\用户名
\用户名\INBOX
\用户名\已发送
\用户名\草稿
\USERNAME\DELETED

然后,我扫描这些文件夹中的 .MSG 文件,并尝试使用 Outlook API 打开它们。

Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application();

Outlook.NameSpace ns = app.GetNamespace("MAPI");

Outlook.MailItem item = (Outlook.MailItem)ns.OpenSharedItem(EmailPath);

Subject = item.Subject;

Question: I get the following error message when opening what appear to be valid .MSG files using Outlook API to open emails:

Unable to cast COM object of type
'System.__ComObject' to interface type
'Microsoft.Office.Interop.Outlook.MailItem'.
This operation failed because the
QueryInterface call on the COM
component for the interface with IID
'{00063034-0000-0000-C000-000000000046}'
failed due to the following error: No
such interface supported (Exception
from HRESULT: 0x80004002
(E_NOINTERFACE)).

The MSG files open fine in outlook and I'm assured that the forms are standard outlook mail forms.

What is the most likely cause of this error?

Background: One of my colleagues has exported a large number of mailboxes from exchange as PSTs and then run a tool against the PST files to produce a file-structure resembling the original mailbox filled with .MSG files. For example:

\USERNAME
\USERNAME\INBOX
\USERNAME\SENT
\USERNAME\DRAFTS
\USERNAME\DELETED

I then scan these folders for .MSG files and attempt to open them using Outlook API.

Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application();

Outlook.NameSpace ns = app.GetNamespace("MAPI");

Outlook.MailItem item = (Outlook.MailItem)ns.OpenSharedItem(EmailPath);

Subject = item.Subject;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浅忆 2024-11-25 07:38:35

OOM 中的所有 *Item 对象都实现 Type 属性。使用反射动态检索该属性,而不是将返回的对象强制转换为 MailItem。

好的,使用“as”运算符来测试您感兴趣的接口,而不会引发异常。

All *Item objects in OOM implement the Type property. Retrieve that property dynamically using reflection instead of casting the returned object to MailItem.

OK use the "as" operator to test for the interface you are interested in without raising an exception.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文