C# 如何使用c从全局地址列表中获取联系人#

C# 如何使用c从全局地址列表中获取联系人#,c#,outlook,C#,Outlook,我试图从Outlook全球地址列表中获取联系人列表(我想是从Exchange获得的,来自我公司的电子邮件),但我有一个例外。我做了以下代码: Outlook.Application OutlookApplication = new Outlook.Application(); Outlook.AddressLists addrLists = OutlookApplication.Session.AddressLists; Outlook.AddressList gal = addrLists[&

我试图从Outlook全球地址列表中获取联系人列表(我想是从Exchange获得的,来自我公司的电子邮件),但我有一个例外。我做了以下代码:

Outlook.Application OutlookApplication = new Outlook.Application();
Outlook.AddressLists addrLists = OutlookApplication.Session.AddressLists;
Outlook.AddressList gal = addrLists["Global Address List"];
foreach (Outlook.AddressEntry myentry in gal.AddressEntries)
{
    Outlook.ExchangeDistributionList listex = myentry.GetExchangeDistributionList();
    Outlook.AddressEntries entradas = listex.GetExchangeDistributionListMembers();
    for (int i = 0; i < entradas.Count; i++)
    {
        Outlook.AddressEntry exchDLMember = entradas[i];
        MessageBox.Show(exchDLMember.Name, "Info", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
    }
}

提前感谢。

此错误意味着
GetExchangeDistributionList()
方法返回null,您永远不会检查它。此行为是预期的,因为只有在处理GAL通讯组列表时,它才会返回有效对象


对于非DL GAL条目,需要使用方法。您还必须始终检查返回的对象是否有效,而不是空对象。

谢谢,但如何获取contact.email1地址、contact.Department、contact.FullName、contact.昵称。我无法在Outlook中读取此内容。AddressEntry exchDLMemberContactItem是在“联系人”文件夹中的邮件顶部创建的对象(与常规邮件项目的MAPI视图没有太大区别)。GAL对象来自Active Directory,而不是联系人文件夹。使用AddressEntry.PrimarySmtpAddress、Name等。谢谢,但当我尝试在Outlook.AddressEntry.PrimarySmtpAddress中查找PrimarySmtpAddress时,出现错误,类型AddressEntry中不存在类型名PrimarySmtpAddress。有什么问题吗?对不起,这是ExchangeUser.PrimarySmtpAddress
Outlook.AddressEntries entradas = listex.GetExchangeDistributionListMembers();