2016-11-15 16 views
0

總是在我從Outlook中請求電子郵件時,使用Office365時,會在發送郵件後引發COM-Execption。我真的不知道爲什麼... 錯誤:請求使用MAPI的電子郵件時的C#限制錯誤

System.Runtime.InteropServices.COMException (0xBFE40305): 
Die Anzahl der Elemente, die gleichzeitig geöffnet werden können, wurde vom Serveradministrator begrenzt. 
Schließen Sie zunächst geöffnete Nachrichten, oder entfernen Sie Anhänge und Bilder von 
ungesendeten Nachrichten, die Sie gerade verfassen. 

    bei Microsoft.Office.Interop.Outlook._MailItem.get_Recipients() 
..... 

對於不說德語的人來說,它意味着: 元素的計數至極可以在同一時間打開,被限制服務器管理員(....)

我不知道任何關於這種限制,以及我可以在Google或MSDN上找到的解決方案不幫助以太。

它看起來像當程序試圖獲取電子郵件收件人時崩潰。這裏順便說一下,我如何努力獲得Recipiants:

    foreach (var item in SelectedFolder.Items.Restrict(filter)) 
       { 
        Outlook.MailItem mail = item as Outlook.MailItem; 
        if (mail != null) 
        { 
         if (mail.Recipients.Count > 0) 
         { 
          string caption = mail.Subject; 
          string MAIL = mail.Recipients[1].PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x39FE001E"); //<--- CRASH HERE 

我真不明白,這可怎麼發生的,因爲據我所知,當我選擇從Outlook電子郵件,他們只是得到「打開「本地......所以我不能得到,如何」服務器限制「可以訪問到這一點。

問候

回答

2

在在線模式中同時打開的對象的數量由Exchange提供商限制(因爲每個對象打開一個單獨的RPC信道)。

對於消息,默認情況下限制爲255。

不要使用foreach循環 - 它將保持引用循環的每個成員,直到循環退出。使用for循環,並在每次迭代結束時使用Marshal.ReleaseComObject()明確釋放項目(以及您檢索的所有主題,例如收件人或附件)。避免使用多點表示法,因爲這會強制編譯器創建您無法明確發佈的隱式變量。

+0

謝謝你的合格的awnser。 我將更正我的代碼並告訴我的客戶嘗試新版本。 之後,我會告訴你,如果這個解決方案工作正常。 我是否也必須釋放_mail.Recipients_? 那就是我做的:(看下一條評論) – TheVWUP

+1

我無法發佈代碼。 但是我在獲取SMTP地址後發佈了_mail.Recipients_,然後發佈了for(int I = 1;)...中的當前郵件對象,之後我發佈了空洞收集。 – TheVWUP

+0

請顯示您的最新代碼。不要使用類似Marshal.ReleaseComObject(MailItem.Recipients)的東西 - 這是沒有意義的:你得到一個新的COM對象並立即釋放它。將MailItem.Recipients讀取到專用變量中,使用它,然後使用Marshal.ReleaseComObject釋放它。 –

相關問題