C# outlook:无法将类型 'System._ComObject' 的 COM 对象转换为接口类型 'Microsoft.Office.Interop.Outlook.MailItem.'
C# outlook : Unable to cast COM object of type 'System._ComObject' to Interface type 'Microsoft.Office.Interop.Outlook.MailItem.'
我是 c# 新手。
自 1 周以来,我一直在尝试自己解决这个问题,直到我别无选择,只能在这里寻求帮助。
我的目标是创建一个控制台应用程序,它会在辅助邮箱[mailboxB@gmail.com]/第二个 outlook 帐户上查找未读邮件,并根据主题回复这些邮件。
代码在我的机器上工作正常。
不幸的是,当在其他机器上部署相同的 exe 时,会生成以下错误:
无法转换类型为 'microsoft.office.interop.outlook.mailitem' 的 com 对象。此操作失败,因为 COM 组件上的 QueryInterface 调用具有 IID'{00063034-0000- 0000-C000-000000000046}' 由于以下错误而失败:不支持此类接口(HRESULT 异常:0x80004002 (E_NOINTERFACE))
请注意,我已经尝试了以下方法来解决问题,但问题仍然存在:
以管理员身份重新启动 Outlook。
在属性->兼容性下将应用程序的兼容性更改为运行作为管理员
检查了 16.0 的 outlook 版本,代码中使用了相同的 ref。
请在下面找到我的代码:
Outlook.Application oApp = new Outlook.Application();
Outlook.NameSpace oNS = (Outlook.NameSpace)oApp.GetNamespace("MAPI");
MAPIFolder theInbox = oNS.Folders["mailboxB@gmail.com"].Folders["Inbox"];
Outlook.Items unreadItems = theInbox.Items.Restrict("[Unread]=true");
string t = "Test Mail";
try
{
foreach (Outlook.MailItem it in unreadItems)
{
if (it.Subject == t)
{
Outlook.MailItem replyMail = it.Reply();
it.HTMLBody = DateTime.Now.ToString("HH:mm:ss");
replyMail.Send();
it.Unread=false;
}
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
我们将不胜感激任何形式的帮助。
您的收件箱文件夹中可以有 MailItem
以外的项目,例如ReportItem
或 MeetingItem
.
将您的代码更改为
foreach (object obj in unreadItems)
{
if (obj is Outlook.MailItem it)
{
...
我是 c# 新手。
自 1 周以来,我一直在尝试自己解决这个问题,直到我别无选择,只能在这里寻求帮助。
我的目标是创建一个控制台应用程序,它会在辅助邮箱[mailboxB@gmail.com]/第二个 outlook 帐户上查找未读邮件,并根据主题回复这些邮件。
代码在我的机器上工作正常。
不幸的是,当在其他机器上部署相同的 exe 时,会生成以下错误:
无法转换类型为 'microsoft.office.interop.outlook.mailitem' 的 com 对象。此操作失败,因为 COM 组件上的 QueryInterface 调用具有 IID'{00063034-0000- 0000-C000-000000000046}' 由于以下错误而失败:不支持此类接口(HRESULT 异常:0x80004002 (E_NOINTERFACE))
请注意,我已经尝试了以下方法来解决问题,但问题仍然存在:
以管理员身份重新启动 Outlook。
在属性->兼容性下将应用程序的兼容性更改为运行作为管理员
检查了 16.0 的 outlook 版本,代码中使用了相同的 ref。
请在下面找到我的代码:
Outlook.Application oApp = new Outlook.Application();
Outlook.NameSpace oNS = (Outlook.NameSpace)oApp.GetNamespace("MAPI");
MAPIFolder theInbox = oNS.Folders["mailboxB@gmail.com"].Folders["Inbox"];
Outlook.Items unreadItems = theInbox.Items.Restrict("[Unread]=true");
string t = "Test Mail";
try
{
foreach (Outlook.MailItem it in unreadItems)
{
if (it.Subject == t)
{
Outlook.MailItem replyMail = it.Reply();
it.HTMLBody = DateTime.Now.ToString("HH:mm:ss");
replyMail.Send();
it.Unread=false;
}
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
我们将不胜感激任何形式的帮助。
您的收件箱文件夹中可以有 MailItem
以外的项目,例如ReportItem
或 MeetingItem
.
将您的代码更改为
foreach (object obj in unreadItems)
{
if (obj is Outlook.MailItem it)
{
...