我的任務是構建可使用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