代码之家  ›  专栏  ›  技术社区  ›  Vlince

更新Office365个人联系人

  •  1
  • Vlince  · 技术社区  · 9 年前

    我们公司有12名协调员。每个协调员管理一系列个人联系人。

    • Coordinator 1管理409个个人联系人。

    我们有一个填充SQL Server的夜间任务 TABLE 持有个人联系信息。

    中的数据 被提取到12个不同的 CSV files 然后发送给每个协调员。

    进口 CSV file 为了使他的个人联系人列表保持最新(是的,这些个人联系人每天都在变化)。

    整个 正在导入

    我创建了一个C#控制台应用程序,并添加了ADAL和Microsoft Graph client library NuGet包。

    我在Azure中正确注册了我的应用程序,并获得了 Client Id Client Secret

    我设置了适当的 Application and Delegated permissions .

    我能够运行应用程序,获得 token 并调用Microsoft Graph client。

    在撰写本文时,我的问题是Microsoft Graph不支持创建 Contact List 联系人列表 .

    使用的能力 Groups 这是不可能的。每次您将用户添加到组中时,都会向该特定用户发送一封电子邮件,让他知道他已被添加到组中。

    Microsoft Graph还支持创建 Folders 并将人员添加到这些文件夹中,但不幸的是,我发现这些文件夹的唯一用途是组织内容。。。

    对于文件夹,我无法向特定文件夹发送电子邮件,而该文件夹又会向该文件夹中的每个人发送电子邮件。这就是 联系人列表 …但是,在撰写本文时,API没有任何 联系人列表 .

    我不介意重写整个控制台应用程序,甚至完全改变整个方法(比如使用Powershell)

    我所关心的是不要手动创建这12个协调员 CSV文件

    提前谢谢。

    PS:我甚至查看了Microsoft Flow,但还没有找到一个可以更新Outlook个人联系人的流。

    2 回复  |  直到 9 年前
        1
  •  0
  •   Marc LaFleur    9 年前

    目前也没有 Microsoft Graph Outlook REST API 支持“联络小组”。

    EWS Managed API 。中有一个示例C代码的演练 How to: Create contact groups by using EWS in Exchange .

        2
  •  0
  •   Vlince    9 年前

    如果有人在乎的话,这就是最终结果。。。

    static void Main(string[] args)
    {
        try
        {
            var domain = "mydomain.com";
            var email = "service_account@mydomain.com";
            var accountPassword = "Password1";
            var emailToImpersonify = "frank_underwood@mydomain.com";
            var contactGroupDisplayName = "MySuperAmazingContactGroup";
    
            ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013);
            service.Credentials = new NetworkCredential(email, accountPassword, domain);
            service.AutodiscoverUrl(email, RedirectionUrlValidationCallback);
    
            // Make sure the account [service_account@mydomain.com] is a member of the ApplicationImpersonation admin role. 
            service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, emailToImpersonify);
    
            // Prior to creating the ContactGroup, check and delete any pre-existing ContactGroup
            SearchFilter sfSearch = new SearchFilter.IsEqualTo(ContactGroupSchema.DisplayName, contactGroupDisplayName);
            FindItemsResults<Item> results = service.FindItems(WellKnownFolderName.Contacts, sfSearch, new ItemView(int.MaxValue));
            if (results != null)
            {
                foreach (Item item in results)
                    item.Delete(DeleteMode.HardDelete);
            }
    
            // Create the new ContactGroup with a few members
            ContactGroup newContactGroup = new ContactGroup(service);
            newContactGroup.DisplayName = contactGroupDisplayName;
            newContactGroup.Members.Add(new GroupMember("user1@contoso.com"));
            newContactGroup.Members.Add(new GroupMember("user2@contoso.com"));
            newContactGroup.Save();
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
    
    推荐文章