繁体   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