1

我的任务是构建一个使用 MAPI 检查电子邮件的应用程序。我使用了一个用 cpp 编码的包装类,它可以从 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);
}

感谢您的任何建议。

4

1 回答 1

2

You can dynamically create a temporary profile with the MSEMS service and configure it.
See http://support.microsoft.com/kb/306962?wa=wsignin1.0 and scroll to "Use the MAPI IProfAdmin interface"
Make sure the service runs under the identity of the mailbox owner.

于 2013-02-14T19:16:52.173 回答