【问题标题】:Outlook Contacts are created and deleted the next day第二天创建和删除 Outlook 联系人
【发布时间】:2017-08-10 18:16:58
【问题描述】:

背景:

我正在开发一个 C# 控制台应用程序,该应用程序使用 Exchange Web 服务 (EWS) 为 11 个用户创建和/或更新 Outlook 联系人。

应用程序需要模拟这 11 位用户才能正确创建/更新他们各自的 Outlook 联系人。

该应用程序有一个专用的[ServiceAccount],他恰好是ApplicationImpersonation 管理员角色的成员。


问题:

我正在启动应用程序并且它运行正常。

  • 它为 User1 创建了 223 个新联系人。
  • 它为 User2 创建了 117 个新联系人。
  • 等等...直到到达 User11。

为了验证一切正常,我导航到 Office 365 并登录到 User1 的帐户(使用他的凭据),我可以看到 223 个新创建的联系人。

我很高兴,我退出了。

第二天,我做的第一件事是登录 User1 的帐户(使用他的凭据),我不再看到 223 个联系人,而是看到 7 个联系人。

由于未知原因,216 个联系人已从 User1 的联系人中完全消失。

我查看了用户 1 的已删除项目,我在其中看到了这 216 个联系人...


结论:

人们如何开始对此进行调查?我不是 Exchange 专家。

这是我用来创建联系人的代码

private void AddNewOutlookContacts(IEnumerable<Person> contactsToCreate, string emailToImpersonify)
    {
        var service = new ExchangeService(ExchangeVersion.Exchange2013);
        service.Credentials = new NetworkCredential(_serviceAccount, _serviceAccountPwd, _domain);
        service.Url = new Uri(_office365ExchangeUrl);

        service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, emailToImpersonify);

        Collection<Contact> contactItems = new Collection<Contact>();
        foreach (var c in contactsToCreate)
        {
            Contact newContact = new Contact(service);
            newContact.GivenName = c.FirstName;
            newContact.MiddleName = c.LastName;
            newContact.FileAsMapping = FileAsMapping.SurnameCommaGivenName;
            newContact.DisplayName = string.Format("{0} {1}", c.FirstName, c.LastName);
            newContact.PhoneNumbers[PhoneNumberKey.HomePhone] = c.HomePhone;
            newContact.PhoneNumbers[PhoneNumberKey.BusinessPhone] = c.WorkPhone;
            newContact.PhoneNumbers[PhoneNumberKey.MobilePhone] = c.CellPhone;
            newContact.EmailAddresses[EmailAddressKey.EmailAddress1] = new EmailAddress(c.Email);
            newContact.JobTitle = c.JobTitle;

            contactItems.Add(newContact);
        }

        // Batch Create... 
        ServiceResponseCollection<ServiceResponse> response = service.CreateItems(contactItems, WellKnownFolderName.Contacts, null, null);
        if (response.OverallResult == ServiceResult.Success)
        {
            Console.WriteLine("SUCCESS");
        }
        else
        {
            Console.WriteLine("FAILED");
        }
    }

没有任何代码可以删除联系人。

关于可能在 Exchange 上运行导致这些联系人自动消失的任何想法。

有没有我可以查看的日志文件?

任何可以帮助我阐明这一点的东西都会很棒!

最后一件事,所有这 11 位用户都发生了联系人的消失。

【问题讨论】:

    标签: outlook office365 exchangewebservices


    【解决方案1】:

    解决方案:

    我找到了罪魁祸首,这里是解决方案:

    在我之前提供的代码中,我省略了(为简洁起见)我插入多个电子邮件地址的事实,如下所示:

    if (!string.IsNullOrEmpty(c.RLEmail))
        newContact.EmailAddresses[EmailAddressKey.EmailAddress1] = new EmailAddress(c.Email);
    if (!string.IsNullOrEmpty(c.PersonalEmail))
        newContact.EmailAddresses[EmailAddressKey.EmailAddress2] = new EmailAddress(c.PersonalEmail);
    if (!string.IsNullOrEmpty(c.UnionEmail))
        newContact.EmailAddresses[EmailAddressKey.EmailAddress3] = new EmailAddress(c.UnionEmail);
    

    虽然代码会在插入电子邮件地址之前检查 IsNullOrEmpty(),但代码不会验证这些电子邮件地址的唯一性。

    这就是问题所在。

    使用我的测试数据,我创建了一组具有唯一 EmailAddress1 的联系人。

    但是对于EmailAddress2EmailAddress3,我的测试数据没有唯一的电子邮件地址,因此这两个字段中存在重复的地址。

    出于某种原因,我的印象是这些辅助和第三个电子邮件地址是否有重复并不重要,但我错了(它们也是唯一的,这完全有道理)。

    长话短说,Exchange 必须有一个正在运行的作业来清理和删除在 EmailAddress2EmailAddress3 中包含重复电子邮件地址的联系人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-02
      • 1970-01-01
      • 2015-12-18
      • 1970-01-01
      • 1970-01-01
      • 2018-10-14
      相关资源
      最近更新 更多