简体   繁体   中英

Enumerating Microsoft Outlook Contacts

I have the following code to enumerate all the email address of my contacts but I am not able to do so with the exception point at this line

 Outlook.ContactItem oAppt = (Outlook.ContactItem)oItems;

Could someone help me out so that I can enumerate all the email address of my contacts in Microsoft outlook ?

namespace RetrieveContacts
{
    public class Class1
{
     public static int Main(string[] args)
    {
        try
        {
            Outlook.Application oApp = new Outlook.Application();

            Outlook.NameSpace oNS = oApp.GetNamespace("mapi");

            Outlook.MAPIFolder oContacts = oNS.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts);

            Outlook.Items oItems = oContacts.Items;

            Outlook.ContactItem oAppt = (Outlook.ContactItem)oItems;

            for (int i = 0; i <= oItems.Count; i++)
            {
            System.IO.StreamWriter file = new System.IO.StreamWriter("C:\\EmailAddress.txt");
            file.WriteLine(oAppt.Email1Address);
            file.Close();
            }
            oNS.Logoff();

            oAppt = null;
            oItems = null;
            oContacts = null;
            oNS = null;
            oApp = null;
        }
        catch (Exception e)
        {
        System.IO.StreamWriter file = new System.IO.StreamWriter("C:\\Exception.txt");
            file.WriteLine(e);
            file.Close();
        }
        return 0;
    }
  }
}

Without knowing Outlook's object model by heart I'd guess that Outlook.Items is a collection of ContactItem s and thus cannot directly be cast to a single ContactItem . Other concerns:

  • You're creating and writing to your file within the loop, so it would get overwritten each time
  • You need to validate that the item is a ContactItem or your cast will throw an error.
  • the file access should be in a using block so it gets closed automatically if an Exception is thrown
  • Your for loop is going from 0 to Count when it should be going from 0 to Count-1 if the collection is 0-based

Try changing your loop to something like this:

Outlook.Items oItems = oContacts.Items;
using(System.IO.StreamWriter file = new System.IO.StreamWriter("C:\\EmailAddress.txt"))
{
    for (int i = 0; i < oItems.Count; i++)  // Note < instead of <=
    {
        // Will be null if oItems[i] is not a ContactItem
        Outlook.ContactItem oAppt = oItems[i] as Outlook.ContactItem;

        if(oAppt != null)
            file.WriteLine(oAppt.Email1Address);
    }
}
file.Close();
oNS.Logoff();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM