Outlook联系人将在第二天创建和删除

时间:2017-08-10 18:16:58

标签: outlook office365 exchangewebservices

上下文:

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

应用程序需要冒充这11个用户才能正确创建/更新各自的Outlook联系人。

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

问题:

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

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

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

我很开心,我退出了。

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

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

我查看了User1的已删除项目,我在那里看到了这216个联系人......

结论:

如何开始研究这个?我不是交流专家。

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

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个用户身上。

1 个答案:

答案 0 :(得分: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中包含重复电子邮件地址的联系人。