【问题标题】:Need to access Outlook contact details from multiple Mail IDs using C#需要使用 C# 从多个 Mail ID 访问 Outlook 联系人详细信息
【发布时间】:2011-11-15 00:42:07
【问题描述】:

使用应用程序,我使用 C# 获取存储在 Micosoft Office Outlook 中的联系人详细信息。我是通过Microsoft.Office.Interop 命名空间实现的。

我现在面临的问题是,当 Outlook 将多个邮件 ID 配置到同一系统时,我需要分别获取各个邮件 ID 的联系人。 我该怎么做?

这里是示例代码:

/// <summary>
/// Getting the contacts by passing the folder name.
/// </summary>
/// <param name="folderName"></param>
/// <returns></returns>
private List<MyContact> GetContactsFromFolder(string folderName)
{
    List<MyContact> contacts = null;
    object missing = System.Reflection.Missing.Value;

    //Create instance of Outlook application and Outlook Contacts folder.
    try
    {
        OutLook.MAPIFolder fldContacts = null;
        contacts = new List<MyContact>();
        OutLook._Application outlookObj = new OutLook.Application();
        /* if (folderName == "Default")
        {
            fldContacts = (OutLook.MAPIFolder)outlookObj.Session.GetDefaultFolder(OlDefaultFolders.olFolderInbox);
        }
        else
        {
            OutLook.MAPIFolder contactsFolder = (OutLook.MAPIFolder)
            outlookObj.Session.GetDefaultFolder(OlDefaultFolders.olFolderInbox);
            //VERIFYING THE CUSTOM FOLDER IN OUT LOOK .
            foreach (OutLook.MAPIFolder subFolder in contactsFolder.Folders)
            {
                if (subFolder.Name == folderName)
                {
                    fldContacts = subFolder;
                    break;
                }
            }
        }
        * */

        fldContacts = (OutLook.MAPIFolder)outlookObj.Session.GetDefaultFolder(OlDefaultFolders.olFolderInbox);

        //LOOPIN G THROUGH CONTACTS IN THAT FOLDER.
        foreach (Microsoft.Office.Interop.Outlook._MailItem contactItem in fldContacts.Items)
        {
            MyContact contact = new MyContact();

            contact.FromAddress = contactItem.SenderEmailAddress;
            contact.ToAddress = contactItem.To;
            contact.Subject = contactItem.Subject;
            contact.MailSize = contactItem.Size.ToString();
            contact.Received = contactItem.ReceivedTime.ToString();

            System.Data.SqlClient.SqlConnection con;
            con = new System.Data.SqlClient.SqlConnection();
            con.ConnectionString = "Initial Catalog=sample;Integrated Security=True;Server=Test;Connect Timeout=900";
            try
            {
                con.Open();
                string to_address = "";
                string Cc = "";

                foreach (Microsoft.Office.Interop.Outlook.Recipient olRecipient in contactItem.Recipients)
                {
                    if (contactItem.To.ToLower().Contains(olRecipient.Address.ToLower()) == true ||
                        contactItem.To.ToLower().Contains(olRecipient.Name.ToLower()) == true)
                    {
                        if (to_address != "")
                        {
                            to_address = to_address + ";" + olRecipient.Name + " <" + olRecipient.Address + ">";
                        }
                        else
                        {
                            to_address =olRecipient.Name+" <"+olRecipient.Address+">";
                        }
                    }
                    else
                        if (contactItem.CC != null && contactItem.CC.ToString() != "")
                        {
                            if (contactItem.CC.ToLower().Contains(olRecipient.Address.ToLower()) == true ||
                                contactItem.CC.ToLower().Contains(olRecipient.Name.ToLower()) == true)
                            {
                                if (Cc != "")
                                {
                                    Cc = Cc + ";" + olRecipient.Name + " <" + olRecipient.Address + ">";
                                }
                                else
                                {
                                    Cc = olRecipient.Name + " <" + olRecipient.Address + ">";
                                }
                            }
                        }
                }
                //contact.
                contacts.Add(contact);
            }
        }

【问题讨论】:

  • 请给我们看一些代码。根据您现在的操作方式,可能需要进行一些更改,因为您不应该总是只打开主用户或默认用户的文件夹。

标签: c# outlook-2007


【解决方案1】:

关键在于您的代码调用:

fldContacts = (OutLook.MAPIFolder)outlookObj.Session.GetDefaultFolder(OlDefaultFolders.olFolderInbox);

在这里你总是打开默认文件夹。

您应该尝试枚举可用文件夹并调用Session 对象的另一种方法来打开您需要使用的文件夹。

我现在不知道答案,但这是前进的方向。

【讨论】:

  • 我也使用了 subFolder,为了测试我已经注释了代码块。问题在于访问多个 ID
猜你喜欢
  • 2012-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多