Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.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#EWS管理的API 2.0将全局地址列表同步到应用程序_C#_Wpf_Ews Managed Api - Fatal编程技术网

C#EWS管理的API 2.0将全局地址列表同步到应用程序

C#EWS管理的API 2.0将全局地址列表同步到应用程序,c#,wpf,ews-managed-api,C#,Wpf,Ews Managed Api,您好,我尝试为一个俱乐部编写一个应用程序,使年长会员更容易使用outlook和发送电子邮件。这是一种友好的方式,让老年人可以轻松地书写和看到屏幕上的内容。但我是一个新手程序员,以前从未使用过EWS管理的API。我想要的是将全局地址列表同步到我的程序中,这样我就可以将它们分配给一个对象并做更多的事情。但是我已经没有任何线索了 我尝试的是: 我自己的本地联系人列表(工作) private void AsignValuetoClass(对象发送方,路由目标) { //用于连接 es.UseDefaul

您好,我尝试为一个俱乐部编写一个应用程序,使年长会员更容易使用outlook和发送电子邮件。这是一种友好的方式,让老年人可以轻松地书写和看到屏幕上的内容。但我是一个新手程序员,以前从未使用过EWS管理的API。我想要的是将全局地址列表同步到我的程序中,这样我就可以将它们分配给一个对象并做更多的事情。但是我已经没有任何线索了

我尝试的是:

我自己的本地联系人列表(工作)

private void AsignValuetoClass(对象发送方,路由目标)
{
//用于连接
es.UseDefaultCredentials=true;
es.自动发现URL(“最大。mustermann@muster.at,重定向UrlValidationCallback);
//文件夹中有多少个联系人
ContactsFolder ContactsFolder=ContactsFolder.Bind(es,WellKnownFolderName.Contacts);
//获取特定数量的联系人
int numItems=contactsfolder.TotalCount<50?contactsfolder.TotalCount:50;
//Itemview的对象
ItemView视图=新的ItemView(numItems);
//还东西
FindItemsResults ContactId=es.FindItems(WellKnownFolderName.Contacts,视图);
//循环浏览该项
foreach(ContactID中的项目)
{
如果(项目为联系人)
{
//指定联系人项目的名称
联系人=作为联系人的项目;
//新名单
List testlist=新列表();
//添加联系人
testlist.Add(联系人);
//循环浏览联系人列表
foreach(testlist中的联系人列表)
{
//每次运行时都会出现新对象
TestKlasse test=新的TestKlasse();
//分配
test.id=Convert.ToString(contact.id);
test.Vorname=contact.GivenName;
test.Nachname=联系人。姓氏;
}
Console.WriteLine(“一些愚蠢的文本”);
}
}
}
从GAL处获取联系人(不工作)

private void SearchContacts(对象发送者,事件参数e)
{
//用于连接
es.UseDefaultCredentials=true;
es.自动发现URL(“最大。mustermann@muster.at,重定向UrlValidationCallback);
NameResolutionCollection nameResolutions=es.ResolveName(
“联系人”,
ResolveNameSearchLocation.directorytenContacts,
正确的);
foreach(名称解析中的名称解析)
{
ExpandGroupResults groupResults=es.ExpandGroup(namesolution.Mailbox.Address);
foreach(groupResults.Members中的EmailAddress成员)
{
Console.WriteLine(member.Name+“”);
}
}
}
我也尝试了resolvename()的功能,但它只适用于一个联系人或匹配的联系人。我需要每一个联系人。代码如下: 私有void SearchContacts(对象发送者、事件参数e) {

        //For the connection
        es.UseDefaultCredentials = true;
        es.AutodiscoverUrl("max.mustermann@muster.at", RedirectionUrlValidationCallback);


        // Identify the mailbox folders to search for potential name resolution matches.
        List<FolderId> folders = new List<FolderId>() { new FolderId(WellKnownFolderName.Contacts) };

        // Search for all contact entries in the default mailbox contacts folder and in Active Directory Domain Services (AD DS). This results in a call to EWS.
        NameResolutionCollection coll = es.ResolveName("Anderl", folders, ResolveNameSearchLocation.ContactsThenDirectory, false);

        foreach (NameResolution nameRes in coll)
        {
            Console.WriteLine("Contact name: " + nameRes.Mailbox.Name);
            Console.WriteLine("Contact e-mail address: " + nameRes.Mailbox.Address);
            Console.WriteLine("Mailbox type: " + nameRes.Mailbox.MailboxType);
        }

    }
//用于连接
es.UseDefaultCredentials=true;
es.自动发现URL(“最大。mustermann@muster.at,重定向UrlValidationCallback);
//标识邮箱文件夹以搜索可能的名称解析匹配项。
List folders=new List(){new FolderId(WellKnownFolderName.Contacts)};
//在默认邮箱联系人文件夹和Active Directory域服务(AD DS)中搜索所有联系人条目。这将导致呼叫EWS。
NameResolutionCollection coll=es.ResolveName(“Ander”,文件夹,ResolveNameSearchLocation.Contacts目录,false);
foreach(名称解析名称在coll中)
{
Console.WriteLine(“联系人姓名:”+nameRes.Mailbox.name);
Console.WriteLine(“联系人电子邮件地址:“+nameRes.Mailbox.address”);
Console.WriteLine(“邮箱类型:”+nameRes.MailboxType);
}
}

任何帮助都将是伟大的,所以谢谢你的时间。对不起,我的英语不好

这可能来得有点晚,但克服100个用户限制的一种方法是在循环中简单地将字母表的每个字符附加到“SMTP:”中,如下所示:

private\u exchangeSvc=new-ExchangeService();
常量字符串SMTP_PREFIX=“SMTP:”;
常量字符串ABC=“abcdefghijklmnopqrstuvxyz”;
公共列表GetGAL()
{
var gal=新列表();
foreach(ABC中的字符c)
{
字符串UnliguousName=SMTP_前缀+c;
var namerecollection=\u exchangeSvc.ResolveName(
模棱两可的名字,
ResolveNameSearchLocation.DirectoryOnly,
假);
gal.AddRange(名称重新收集);
}
//如果发现重复项,请取消注释下面的行。
//gal=gal.Distict().ToList()
返回gal;
}

当我需要通过EWS获取GAL时,这对我很有效,不过我只需要检索约400个用户。

使用EWS无法获取整个GAL。您只能从GAL检索前100个用户或搜索特定用户。看到这个答案:哦,好的,thx的信息累了,在谷歌上找到它,但没有运气,现在它清楚了。
 private void SearchContacts(object sender, EventArgs e)
    {

       //For the connection
        es.UseDefaultCredentials = true;
        es.AutodiscoverUrl("max.mustermann@muster.at", RedirectionUrlValidationCallback);

        NameResolutionCollection nameResolutions = es.ResolveName(
            "Contacts",
            ResolveNameSearchLocation.DirectoryThenContacts,
            true);

        foreach (NameResolution nameResolution in nameResolutions)
        {
            ExpandGroupResults groupResults = es.ExpandGroup(nameResolution.Mailbox.Address);
            foreach (EmailAddress member in groupResults.Members)
            {
                Console.WriteLine(member.Name + " <" + member.Address + ">");
            }
        }

    }
        //For the connection
        es.UseDefaultCredentials = true;
        es.AutodiscoverUrl("max.mustermann@muster.at", RedirectionUrlValidationCallback);


        // Identify the mailbox folders to search for potential name resolution matches.
        List<FolderId> folders = new List<FolderId>() { new FolderId(WellKnownFolderName.Contacts) };

        // Search for all contact entries in the default mailbox contacts folder and in Active Directory Domain Services (AD DS). This results in a call to EWS.
        NameResolutionCollection coll = es.ResolveName("Anderl", folders, ResolveNameSearchLocation.ContactsThenDirectory, false);

        foreach (NameResolution nameRes in coll)
        {
            Console.WriteLine("Contact name: " + nameRes.Mailbox.Name);
            Console.WriteLine("Contact e-mail address: " + nameRes.Mailbox.Address);
            Console.WriteLine("Mailbox type: " + nameRes.Mailbox.MailboxType);
        }

    }