【问题标题】:Using MAPI to access the Exchange Server from a Service使用 MAPI 从服务访问 Exchange Server
【发布时间】:2013-02-15 13:44:30
【问题描述】:

我的任务是构建一个使用 MAPI 检查电子邮件的应用程序。我使用了在 cpp 中编码的wrapper class,它可以从 c# 访问。我意识到将托管代码和非托管代码结合起来不一定是最佳途径,但这是我可以开始工作的。

在它运行后,我被要求将应用程序设为服务,以便在系统未登录时运行它。

客户端要求我们使用 MAPI,并且使用的是 Outlook 2007,但我希望它与 x86 和 x64 架构兼容。将允许在多个工作站上运行的单独程序使用单个电子邮件地址发送邮件。该服务将监视此帐户,并监视来自 Exchange 的新电子邮件,称无法传递消息。发生这种情况时,它会在数据库中做一个注释以供将来更正。

我对扩展 MAPI 工作原理的理解是,它使用登录人员的配置文件来访问 Exchange Server。我的问题是,当没有人登录系统时,是否可以通过 MAPI 访问 Exchange Server?如果这不可能,OOM 是否允许在没有用户登录时访问特定的电子邮件帐户(或配置文件)?当主要使用 c# 时,一种方法会比另一种更好吗?

以下是包装类如何登录的简要示例。我添加了第二种方法,但从未让它登录到当前用户以外的配置文件。

BOOL CMAPIEx::Login(LPCTSTR szProfileName, BOOL bInitAsService)
{
    DWORD dwFlags=MAPI_EXTENDED | MAPI_USE_DEFAULT | MAPI_NEW_SESSION;
    if(bInitAsService) dwFlags|=MAPI_EXPLICIT_PROFILE | MAPI_NT_SERVICE;
    return (MAPILogonEx(NULL, (LPTSTR)szProfileName, NULL, dwFlags, &m_pSession)==S_OK);
}

BOOL CMAPIEx::Login(LPCTSTR szProfileName, LPCTSTR szProfilePassword, BOOL bInitAsService)
{
    DWORD dwFlags=MAPI_EXTENDED | MAPI_EXPLICIT_PROFILE  | MAPI_NEW_SESSION;
    if(bInitAsService) 
        dwFlags|= MAPI_NT_SERVICE;
    return (MAPILogonEx(NULL, (LPTSTR)szProfileName, (LPTSTR)szProfilePassword, dwFlags, &m_pSession)==S_OK);
}

感谢您的任何建议。

【问题讨论】:

  • 您是否考虑过使用 Exchange Web 服务而不是依赖运行时环境中的配置文件?它有一个托管的 .net 包装器,使其非常易于使用。

标签: c# exchange-server mapi outlook-object-model


【解决方案1】:

您可以使用 MSEMS 服务动态创建临时配置文件并对其进行配置。
请参阅 http://support.microsoft.com/kb/306962?wa=wsignin1.0 并滚动到“使用 MAPI IProfAdmin 界面”
确保服务以邮箱所有者的身份运行。

【讨论】:

  • 这是一个很好的建议,但它并没有像我想象的那样对我有用。我在用户级别登录,因此我可以访问与该帐户关联的个人资料。我相信这个配置文件应该已经创建并关联了。
  • 如果您以具有本地权限的域用户身份登录,并且在运行您的服务的计算机上创建了配置文件,您可以简单地使用 MAPILogonEx 登录到现有配置文件。只需确保您的服务以拥有配置文件中主邮箱的域用户身份运行,并且该域用户配置了本地 Outlook 配置文件。
  • 再次将其标记为已解决。德米特里实际上在这里解决了它:social.msdn.microsoft.com/Forums/en-US/outlookdev/thread/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-03
  • 1970-01-01
  • 2022-05-24
  • 2011-12-01
相关资源
最近更新 更多