Question

System.Runtime.InteropServices.COMException ..Your server administrator has limited the number of items you can open simultaneously...

at Microsoft.Office.Interop.Outlook._AppointmentItem.get_UserProperties()

        var calendar = outlookApplication.GetNamespace("MAPI").GetDefaultFolder(OlDefaultFolders.olFolderCalendar);

        if (calendar == null || calendar.Items == null)
        {
            return null;
        }

        var calendarItems = calendar.Items;

        if (calendarItems != null && calendarItems.Count > 0)
        {
            // Dont convert to LINQ or foreach please -> may cause Outlook memory leaks. 
            for (int counter = 1; counter <= calendarItems.Count; counter++)
            {
                var appointment = calendarItems[counter] as AppointmentItem;

                if (appointment != null)
                {
                    var userProperty = appointment.UserProperties.Find("myInformation");

                    if (userProperty != null && userProperty.Value == myValue)
                    {
                        return appointment ;
                    }
                }
            }
        }

Maybe its appointment.UserProperties.Find("myInformation") cause COMException?

Was it helpful?

Solution 3

I have found the solution for this. It isnt necessary to use Find cause Restrict make what I need.

...
string filter = string.Format("[myInformation] = '{0}'", myInformation);
var calendarItems = calendar.Items.Restrict(filter);
...

OTHER TIPS

When done with an Outlook Mailitem close it then release it

For Each item As Outlook.MailItem In oFolder.Items
  '<process item code>

  'Close the item
    'SaveMode Values
    'olDiscard  = 1
    'olPromptForSave = 2
    'olSave = 0
  item.Close(1)

  'Release item
  Marshal.ReleaseComObject(item)
Next

You need to make sure you release Outlook items as soon as you are done with them using Marshal.ReleaseComObject() instead of waiting for the Garbage Collector to kick in.

You also need to avoid multiple dot notation to make sure you do not get implicit variables (created by the compiler) that hold that intermediary results and cannot be explicitly referenced and released.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top