簡體   English   中英

使用 MAPI 請求電子郵件時 C# 限制錯誤

[英]C# Limit Error when requesting E-Mails using MAPI

當我從使用 Office365 的 Outlook 請求電子郵件時,總是會在郵件計數后引發 COM 異常。 我真的不知道為什么...

錯誤:

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 上找到的解決方案對以太沒有幫助。

當程序嘗試獲取電子郵件收件人時,它看起來像是崩潰了。 這是我嘗試獲取收件人的方法:

                    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 中選擇電子郵件時,它們只是在本地“打開”......所以我無法理解“服務器限制”如何可以訪問這個。

在聯機模式下,同時打開的對象數量受 Exchange 提供程序的限制(因為每個對象都打開一個單獨的 RPC 通道)。

對於消息,默認限制為 255。

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

還要記住, as運算符也會產生一個隱式變量 - 將該行分成兩行並使用Marshal.ReleaseComObject()釋放這兩個變量

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM