取消删除Outlook中的联系人

时间:2010-03-07 23:28:51

标签: delphi outlook mapi

我有一个用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;
//.....

2 个答案:

答案 0 :(得分:3)

删除联系人后,会将其放入“已删除邮件”文件夹中。除了在该文件夹中之外,没有其他“已删除”状态。 “Undeleting”就像把它移回去一样简单。

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

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

答案 1 :(得分:1)

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

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