2015-07-01 27 views
0

我使用下面的msdn鏈接中的代碼,它在我的系統中完美地工作以獲取發件人電子郵件地址。但是,當我將相同的代碼部署到我們的一個開發服務器時,下面的代碼行無限期地掛起\無限制地凍結而沒有任何響應。追蹤之後,我認爲如果發送者對象的屬性被訪問,它永遠掛起。高速緩存交換模式在郵箱上「打開」,並在Outlook 2010中運行。我也從手動下載了Outlook的地址簿,但它不會幫助。我相信這不是一個代碼問題。有人可以幫忙嗎?Outlook Interop - MailItem.Sender掛起凍結

https://msdn.microsoft.com/en-us/library/office/ff184624.aspx

sender.AddressEntryUserType == Outlook.OlAddressEntryUserType。 olExchangeUserAddressEntry || sender.AddressEntryUserType == Outlook.OlAddressEntryUserType。 olExchangeRemoteUserAddressEntry

+0

您是否可以在同一臺機器上手動雙擊Outlook中該項目的發件人並查看詳細信息? –

+0

@Dmitry是的,我可以看到那些細節。 – appootan

+0

在同一臺機器上,對嗎? –

回答

0

由於Office可能不支持Microsoft Office應用程序從任何無人值守的非交互式客戶端應用程序或組件(包括ASP,ASP.NET,DCOM和NT服務)中推出並不支持Microsoft Office應用程序的自動化當Office在此環境中運行時表現出不穩定的行爲和/或死鎖。

如果您正在構建一個在服務器端上下文中運行的解決方案,那麼您應該嘗試使用對於無人執行安全的組件。或者,您應該嘗試找到允許至少部分代碼運行客戶端的替代方案。如果您從服務器端解決方案使用Office應用程序,則該應用程序將缺少成功運行所需的許多必要功能。此外,您將面臨整體解決方案穩定性的風險。請閱讀Considerations for server-side Automation of Office文章中的更多內容。

Outlook所基於的低級API支持從服務運行代碼。你可以使用任何語言來實現這個任務(C#和VB.NET)。但是微軟官方不支持這樣的解決方案/代碼。如果您遇到任何問題,您將獨處,但託管代碼充當魅力。請參閱EWS Managed API, EWS, and web services in Exchange

+0

感謝Eugene從MSDN的鏈接,它是有用的。我決定繼續兌換,因爲用戶登錄需要在交換服務器中擁有特殊的訪問權限才能使用EWS API。 – appootan

0

您無法在服務中使用Outlook。沒有Office應用程序(包括Outlook)可用於服務。

您的選擇是擴展MAPI(C++或Delphi),Redemption(它包裝擴展MAPI並可以使用任何語言)或EWS

+0

但是,如何在我的本地IIS 7中運行相同的服務(這是一個WCF Web服務),從我的Outlook郵箱讀取電子郵件?使用office outlook interop api僅限於本地服務而不是Windows Server 2012類環境時是否存在限制? – appootan

+0

這是關於在服務中使用Office應用程序的問題 - 它們在您的開發環境中可以正常工作,但在最不適當的時刻以非常壯觀的方式失敗,例如向老闆演示代碼或在生產中部署後。 –

+0

我可以獲取MailItem中的附件並將其成功保存在Dev Server中。但MailItem中的其他屬性(如MailItem.Recipients,MailItem.Sender,MailItem.SentOn等等)中的其他屬性很少。如果觸及,則會導致整個事件無限期掛起。 – appootan