使用MAPI

时间:2016-11-15 14:15:09

标签: c# outlook office365 exchange-server mapi

总是当我从我的Outlook请求电子邮件时,使用Office365会在邮件计数后抛出COM-Execption。我真的不知道为什么...... 错误:

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中选择电子邮件时,他们只是打开了#34;本地......所以我无法得到,服务器限制&#34;可以访问这个。

问候

1 个答案:

答案 0 :(得分:2)

在联机模式下,Exchange提供程序限制同时打开的对象数(因为每个对象都会打开一个单独的RPC通道)。

对于消息,默认情况下限制为255。

不要使用foreach循环 - 它将保持循环的每个成员被引用,直到循环退出。使用for循环,并在每次迭代结束时使用Marshal.ReleaseComObject()显式释放项目(以及您检索到的所有主题,例如收件人或附件)。避免使用多点符号,因为这会强制编译器创建无法显式释放的隐式变量。