我的任务是构建可使用MAPI检查电子邮件的应用程序。我使用了cpp编码的wrapper class,这是从c#访问的。我意识到,结合托管代码和非托管代码并不一定是最好的路径,但这是我能够工作的。使用MAPI从服务访问Exchange服务器
得到它的工作,有人问我,使应用程序的服务,所以当在没有登录系统就可以运行了。
客户要求我们使用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);
}
谢谢你的任何建议。
您是否考虑过使用交换Web服务,而不是依赖运行时环境的配置文件?它有一个托管的.net包装器,可以很容易地处理。 – sasfrog 2013-02-14 22:22:16