我有一个用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;
//.....
答案 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开发人员工具