2016-11-15 20 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释放它。 –

相关问题