5

我有一个用 Delphi 编写的应用程序,可以在 Outlook 中添加/更新联系人。我遇到的问题是,如果联系人已在 Outlook 中删除,代码仍然会找到联系人并对其进行更新 - 并且联系人仍然被删除。有没有办法可以确定联系人是否被删除或取消删除?

大致代码如下所示:

  OutlookApp := CreateOleObject('Outlook.Application');
  Mapi := OutlookApp.GetNameSpace('MAPI');

//.....
        try
          if ContactOutlookEntryID.AsString <> '' then
            aContact := Mapi.GetItemFromID(ContactOutlookEntryID.AsString);
        except
        end;
          //try to locate the contact if they have been synchro'd before
        if VarIsEmpty(aContact) then //if not found
          aContact := Contacts.Items.Add(2); //add a new contact to outlook
        aContact.LastName := ContactSurname.AsString;
//.....
4

2 回答 2

3

当联系人被删除时,它们会被放入“已删除邮件”文件夹中。除了在该文件夹中之外,没有其他“已删除”状态。“取消删除”就像将其移出一样简单。

ContactItem 对象上有一个Move方法,您可以使用该方法将其移回默认联系人文件夹,您可以使用NameSpace.GetDefaultFolder方法获取该文件夹。

编辑 要确定联系人是否在已删除的项目文件夹中,您可以查看应返回 MAPIFolder 对象的 Parent 属性。然后,您可以将其 EntryID 与 GetDefaultFolder(olFolderDeletedItems) 返回的进行比较。

于 2010-03-07T23:47:21.923 回答
1

请记住,这是 PST 特定的 - 当项目移动到不同的文件夹时,PST 提供程序不会更改条目 ID。

Dmitry Streblechenko (MVP) http://www.dimastr.com/ OutlookSpy - Outlook、CDO 和 MAPI 开发工具

于 2010-03-17T17:04:28.457 回答