使用MAPI从服务访问Exchange Server

我的任务是构建一个使用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); } 

谢谢你的任何建议。

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