【问题标题】:Problems accessing Outlook from c# Application从 c# 应用程序访问 Outlook 的问题
【发布时间】:2014-11-14 19:24:38
【问题描述】:

我正在编写一个控制台应用程序,它检查 Outlook 邮箱的内容,以便将特定电子邮件的内容读入数据库。

无论 Outlook 是否打开,此应用程序都可以在 Visual Studio 中正常运行。

如果我构建应用程序并从 exe 运行它,它仅在 Outlook 打开时才有效,这不是问题。

但是,我需要从计划任务中运行它,因为它必须每隔几分钟运行一次。这根本行不通。

我正在使用以下代码:

System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcessesByName("OUTLOOK");

int collCount = processes.Length;

if (collCount != 0)
{
    OutlookApp = Marshal.GetActiveObject("Outlook.Application") as Application;  
}
else
{
    OutlookApp = new Application();
} 

我得到的错误信息是:

System.Runtime.InteropServices.COMException (0x800401E3):操作 不可用(HRESULT 异常:0x800401E3 (MK_E_UNAVAILABLE))
在 System.Runtime.InteropServices.Marshal.GetActiveObject(Guid& rclsid, IntPtr 保留, Object& ppunk) 在 System.Runtime.InteropServices.Marshal.GetActiveObject(字符串 progID) 在 ImportCruiseEmails.Program.Main()

上线:

Marshal.GetActiveObject("Outlook.Application") as Application;

Outlook 和控制台应用程序都在我的用户帐户下运行,该帐户具有管理员权限。整个下午我一直在用这个拉头发。任何人都可以阐明它吗?干杯!

【问题讨论】:

  • 您确定您的程序和 Outlook 在同一个用户下运行吗?
  • 好吧,Outlook 进程在我设置计划任务的同一用户下运行,但是根据 Dmitry 在下面的回答,这不一样。

标签: c# outlook console-application marshalling office-interop


【解决方案1】:

即使用户帐户相同,安全上下文也不同,因为调度程序作为服务运行。并且任何 Office 应用都不能在服务中使用。

你的选择是

  1. 如果是 Exchange Server,请使用EWS 访问邮箱。

  2. 扩展 MAPI(仅限 C++ 或 Delphi)

  3. Redemption(我是它的作者,任何语言) - 它包装了扩展 MAPI,并且它的 RDO 系列对象可以从服务中使用。

【讨论】:

  • 感谢您的回复。虽然它目前用于 POP3 帐户,但我可以将电子邮件路由到我们 Exchange 服务器上的帐户,以便使用 EWS。愚蠢的是,当我开始创建它时,我什至没有考虑到我实际上需要一直打开 Outlook 才能让新电子邮件真正进入收件箱,这绝不是理想的。我会假设如果我要使用 EWS,这将不再是问题,因为它会直接与 Exchange 服务器通信?
  • 我的 IT 部门不允许 EWS,所以我查看了 Redemption。虽然我设法让它工作,使用它来访问 SafeMailItem 对象,但我仍然只能在手动运行应用程序时执行此操作。我进行了大量搜索,但找不到任何关于如何使用它来绕过我最初从计划任务中访问 Outlook 的权限问题的答案。最后我只是在应用程序中设置了一个计时器并手动运行它,这消除了对计划任务的需求并解决了权限问题,但如果知道如何使用 Redemption 来完成它会很好吗?
  • 不要使用 SafeMailItem - Safe*Item 对象旨在与您现有的 Outlook 对象模型代码一起使用,只需进行最少的修改。使用 RDO 对象系列 - RDOSession 及其子对象是 CDO 1.21 或 OOM 的替代品(但如果需要,仍可与 OOM 一起使用)。见dimastr.com/redemption/rdo_introduction.htm
猜你喜欢
  • 1970-01-01
  • 2020-11-29
  • 1970-01-01
  • 1970-01-01
  • 2011-03-31
  • 2019-03-18
  • 2011-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多