2013-02-14 68 views
1

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

謝謝你的任何建議。

+0

您是否考慮過使用交換Web服務,而不是依賴運行時環境的配置文件?它有一個託管的.net包裝器,可以很容易地處理。 – sasfrog 2013-02-14 22:22:16

回答

2

您可以使用MSEMS服務動態創建臨時配置文件並對其進行配置。
請參閱http://support.microsoft.com/kb/306962?wa=wsignin1.0並滾動至「使用MAPI IProfAdmin界面」
確保服務以郵箱所有者的身份運行。

+0

這是一個很好的建議,但它並沒有像我想象的那樣爲我工作。我在用戶級別登錄,因此我可以訪問與該帳戶關聯的配置文件。我相信這個配置文件應該已經創建並關聯了。 – Tim 2013-03-27 23:33:54

+0

如果您以具有本地權限的域用戶身份登錄,並且在運行服務的計算機上創建了配置文件,則只需使用MAPILogonEx即可登錄到現有配置文件。只要確保您的服務以在配置文件中擁有主郵箱的域用戶身份運行,並且該域用戶已配置了本地Outlook配置文件即可。 – 2013-03-28 16:38:01

+0

標記爲再次解決。德米特里實際上解決了它在這裏:http://social.msdn.microsoft.com/Forums/en-US/outlookdev/thread/7a9cc40a-ffd6-4f83-9973-5410615b4df4 – Tim 2013-04-05 23:06:18

相關問題