Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 需要使用C从多个邮件ID访问Outlook联系人详细信息#_C#_Outlook 2007 - Fatal编程技术网

C# 需要使用C从多个邮件ID访问Outlook联系人详细信息#

C# 需要使用C从多个邮件ID访问Outlook联系人详细信息#,c#,outlook-2007,C#,Outlook 2007,使用应用程序,我使用C#获取存储在Micosoft Office Outlook中的联系人详细信息。我是通过Microsoft.Office.Interop名称空间实现的 我现在面临的问题是,当Outlook将多个邮件ID配置到同一个系统时,我需要分别获取各个邮件ID的联系人。 我该怎么做 以下是示例代码: /// <summary> /// Getting the contacts by passing the folder name. /// </summary> /

使用应用程序,我使用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);
            }
        }
//
///通过传递文件夹名获取联系人。
/// 
/// 
/// 
私有列表GetContactsFromFolder(字符串folderName)
{
列出联系人=空;
缺少对象=System.Reflection.missing.Value;
//创建Outlook应用程序和Outlook联系人文件夹的实例。
尝试
{
OutLook.MAPIFolder fldContacts=null;
联系人=新列表();
OutLook.\u Application outlookObj=新建OutLook.Application();
/*如果(folderName==“默认值”)
{
fldContacts=(OutLook.MAPIFolder)outlookObj.Session.GetDefaultFolder(OlDefaultFolders.olFolderInbox);
}
其他的
{
OutLook.MAPIFolder联系人文件夹=(OutLook.MAPIFolder)
outlookObj.Session.GetDefaultFolder(OlDefaultFolders.olFolderInbox);
//正在验证自定义文件夹的输入输出外观。
foreach(contactsFolder.Folders中的OutLook.MAPIFolder子文件夹)
{
if(subFolder.Name==folderName)
{
fldContacts=子文件夹;
打破
}
}
}
* */
fldContacts=(OutLook.MAPIFolder)outlookObj.Session.GetDefaultFolder(OlDefaultFolders.olFolderInbox);
//通过该文件夹中的联系人进行循环。
foreach(Microsoft.Office.Interop.Outlook.\u fldContacts.Items中的MailItem contactItem)
{
MyContact联系人=新的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=“初始目录=示例;集成安全性=True;服务器=测试;连接超时=900”;
尝试
{
con.Open();
字符串到_address=“”;
字符串Cc=”“;
foreach(contactItem.Recipients中的Microsoft.Office.Interop.Outlook.Recipient-olRecipient)
{
如果(contactItem.To.ToLower())包含(olRecipient.Address.ToLower())==true||
contactItem.To.ToLower().Contains(olRecipient.Name.ToLower())==true)
{
如果(收件人地址!=“”)
{
收件人地址=收件人地址+“;”+olRecipient.Name+”;
}
其他的
{
收件人地址=olRecipient.Name+“”;
}
}
其他的
if(contactItem.CC!=null&&contactItem.CC.ToString()!=“”)
{
如果(contactItem.CC.ToLower()包含(olRecipient.Address.ToLower())==true||
contactItem.CC.ToLower()包含(olRecipient.Name.ToLower())==true)
{
如果(Cc!=“”)
{
Cc=Cc+”;“+olRecipient.Name+”;
}
其他的
{
Cc=olRecipient.Name+“”;
}
}
}
}
//联系方式。
联系人。添加(联系人);
}
}

关键在于调用您的代码:

fldContacts = (OutLook.MAPIFolder)outlookObj.Session.GetDefaultFolder(OlDefaultFolders.olFolderInbox);
在这里,您总是打开默认文件夹

您应该尝试枚举可用文件夹,并调用
会话
对象的另一个方法来打开需要使用的文件夹


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

请给我们看一些代码。根据您现在的操作方式,可能需要进行一些更改,因为您不应该总是只打开主或默认用户文件夹。我也使用了子文件夹,为了测试,我对代码块进行了注释。问题是我n访问多个Id