How to retrieve specific messages by using the Find method and the Restrict method in Visual C# (310265)



The information in this article applies to:

  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET (2003)
  • Microsoft Visual C# .NET (2002)
  • Microsoft Outlook 2000

This article was previously published under Q310265

SUMMARY

This article describes how to use the Microsoft Outlook 10.0 Object Library to retrieve specific messages by using the Find method and the Restrict method in Microsoft Visual C#.

MORE INFORMATION

To use the Microsoft Outlook 10.0 Object Library to retrieve specific messages, follow these steps:
  1. Start Microsoft Visual Studio .NET or Microsoft Visual Studio 2005.
  2. On the File menu, point to New, and then click Project.
  3. In the Visual C# Projects types list, click Console Application.

    By default, the Class1.cs file is created.

    Note In Microsoft Visual C# 2005, click Visual C#" in the Visual C# Projects types list. By default, Program.cs is created.
  4. Add a reference to the Microsoft Outlook 10.0 Object Library. To do so, follow these steps:
    1. On the Project menu, click Add Reference.
    2. Click the COM tab, locate Microsoft Outlook 10.0 Object Library, and then click Select.

      Note In Microsoft Visual C# 2005. you do not have to click Select.
    3. In the Add References dialog box, click OK.
    4. If you are prompted to generate wrappers for the libraries that you selected, click Yes.
  5. In the code window, replace the code with the following:
    using System;
    using System.Reflection;     // to use Missing.Value
    
    namespace FilterAppointments
    {
       /// <summary>
       /// Summary description for Class1.
       /// </summary>
       class Class1
       {
          /// <summary>
          /// The main entry point for the application.
          /// </summary>
          [STAThread]
          public static int Main(string[] args)
          {
             try
             {
                // Create an Outlook application.
                Outlook.Application oApp = new Outlook.Application();
    			
                // Get the Mapi NameSpace and the Logon.
                Outlook.NameSpace oNS = (Outlook.NameSpace)oApp.GetNamespace("mapi");
     
                // Log on using dialog to choose a profile.
                oNS.Logon(Missing.Value, Missing.Value, true, true); 
    
                // Alternate Logon using specific profile
                // TODO: Change the profile name where it is appropriate.
                //oNS.Logon("YourValidProfile", Missing.Value, false, true); 
                 
                // Get the Calendar folder.
                Outlook.MAPIFolder oCalendar = oNS.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar);
    
                // Get the Items collection in the folder.
                Outlook.Items  oItems = (Outlook.Items)oCalendar.Items;
                Console.WriteLine("Total Items (unrestricted): " + oItems.Count);
    
                //Include all occurrences of recurring items, and then sort them.
                oItems.Sort ("[Start]", false);
                oItems.IncludeRecurrences = true;
    
                // Define the string for the search criteria.
                String sCriteria;
    
                // Set the criteria for the Date fields.
                sCriteria = "[Start] <= '09/01/2002 08:00 AM' and [End] >= '2/15/2002 08:00 PM'";
    
                // Set the criteria for a string field.
                // sCriteria = "[Subject] = 'Weekly recurring meeting'";
    
                // Set the criteria for a numeric field.
                // Look for meetings that have not been responded to.
                // sCriteria = "[ResponseStatus] = " + (Int32)Outlook.OlResponseStatus.olResponseNotResponded)
    
                // Use the Restrict method to reduce the number of items to process.
                Outlook.Items oRestrictedItems = oItems.Restrict(sCriteria);
                oRestrictedItems.Sort ("[Start]", false);
                oRestrictedItems.IncludeRecurrences = true;
    
                Console.WriteLine("Total Items Unrestricted : " + oRestrictedItems.Count);
    
                Outlook.AppointmentItem oAppointment;
    
                //Get each item until item is null.
                Outlook.AppointmentItem oAppt;
                oAppt = (Outlook.AppointmentItem)oRestrictedItems.GetFirst();
                while (oAppt != null)
                {
                   // Console.WriteLine(i.ToString());
                    Console.WriteLine("  Subject: " + oAppt.Subject.ToString());
                    Console.WriteLine("  Start time: " + oAppt.Start.ToString());
                    Console.WriteLine("  End time: " + oAppt.End.ToString());
                    Console.WriteLine("  Occurrences: " + oAppt.RecurrenceState.ToString());
                    Console.WriteLine("\n\n");
                    oAppt = (Outlook.AppointmentItem)oRestrictedItems.GetNext();
                }
                
    
                // Use the Find method to get single match.
                sCriteria = "[Start] >= '09/30/2001'"; 
                Console.WriteLine("Criteria: " + sCriteria.ToString());
                oAppointment = (Outlook.AppointmentItem)oItems.Find(sCriteria);
                Console.WriteLine("Used Find with Date fields");
                if (oAppointment is Outlook.AppointmentItem) 
                   Console.WriteLine("Found -> " + oAppointment.Subject.ToString());
                else
                   Console.WriteLine("No object found");
    
    
                // Log off
                oNS.Logoff();
    
                // Clean up
                oAppointment = null;
                oRestrictedItems = null;
                oItems = null;
                oCalendar = null;
                oNS = null;
                oApp = null;
             }
     
                //Simple error handling
             catch (Exception e)
             {
                Console.WriteLine("{0} Exception caught.", e);
             }  
    
             //Default return value
             return 0;
          }
       }
    }
    					
  6. Search for the TODO text string in the code, and then modify the code for your environment.
  7. Press the F5 key to build and to run the program.

REFERENCES

For more information about the security features of Outlook 2002, click the following article number to view the article in the Microsoft Knowledge Base:

290500 Description of the developer-related e-mail security features in Outlook 2002


For additional information about issues that may occur when you use the Count property of large collections, click the following article number to view the article in the Microsoft Knowledge Base:

294385 OL2002: Incorrect Count property using recurring appointments


Modification Type:MinorLast Reviewed:10/4/2006
Keywords:kbMsg kbcode kbXML kbHOWTOmaster KB310265 kbAudDeveloper