2016-11-15 3 views
0

常にOutlookの電子メールを要求すると、Office365を使用するとCOMの実行がスローされます。ドイツ語を話さない人のためにC#MAPIを使用して電子メールを要求するときの制限エラー

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() 
..... 

、それは意味:... エラーは、なぜ私は本当に見当がつかない 要素の数を同時に開くことができWICH、によって制限されていますサーバー管理者(....)

私はそのような制限について何も知らないし、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

(各オブジェクトは別々のRPCチャネルを開くため)、同時に開いているオブジェクトの数がExchangeプロバイダによって制限されます。

メッセージの制限は、デフォルトでは255です。

ループはforeachループを使用しないでください。ループが終了するまでループの各メンバを参照し続けます。 forループを使用し、Marshal.ReleaseComObject()を使用して各繰り返しの最後にアイテム(および受信者や添付ファイルなど、取得したすべての件名)を明示的に解放します。コンパイラが明示的に解放できない暗黙的な変数を作成するため、複数のドット表記を使用しないでください。

+0

あなたの有資格者に感謝します。 私は自分のコードを修正し、私の顧客に新しいバージョンを試してもらいます。 その後、この解決策が適切に機能しているかどうかをお知らせします。 _mail.Recipients_も解放する必要がありますか? 私は何をしました:(次のコメントを参照) – TheVWUP

+1

私はコードを投稿できません。 しかし、SMTPアドレスを取得した後に_mail.Recipients_をリリースし、for(int I = 1;)で現在のメールオブジェクトを解放しました。その後、私はホールコレクションを解放しました。 – TheVWUP

+0

最新のコードを示してください。 Marshal.ReleaseComObject(MailItem.Recipients)のようなものを使用しないでください。意味がありません。新しいCOMオブジェクトを取得してすぐに解放します。 MailItem.Recipientsを専用の変数に読み込み、Marshal.ReleaseComObjectを使用して解放します。 –

関連する問題