【问题标题】:How can I find the details of Outlook data in Delphi?如何在 Delphi 中找到 Outlook 数据的详细信息?
【发布时间】:2016-01-14 09:17:54
【问题描述】:

我找到了以下代码here。它在 StackOverflow 上的 this answer 中被提及。

procedure TForm1.Button1Click(Sender: TObject);
const
  olFolderContacts = $0000000A;
var
  Outlook, NameSpace, Contacts, Contact: OleVariant;
  i: Integer;
begin
  Outlook := CreateOleObject('Outlook.Application');
  NameSpace := Outlook.GetNameSpace('MAPI');
  Contacts := NameSpace.GetDefaultFolder(olFolderContacts);

  for i := 1 to Contacts.Items.Count do
  begin
    Contact := Contacts.Items.Item(i);
    {now you can read any property of contact. For example, full name and
     email address}
    ShowMessage(Contact.FullName + ' <' + Contact.Email1Address + '>'); 
  end;

  Outlook := UnAssigned;
end;

Scalabium link 列出了Contact 对象的属性,大概包括FullNameEmail1Address。但是,当我运行代码时,我得到的错误都不存在。我访问联系人的方式是否正确?检索到联系人后,我如何知道联系人具有哪些属性?

更新
我找到了错误的原因,但还没有解决方案。列表中的第一个联系人似乎是联系人组,对于那些FullNameEmail1Address(其他属性不存在)。该代码适用于普通联系人。但我不知道如何区分联系人组和普通联系人。我尝试了try..except,但似乎没有产生异常。

我也按照 whosrdaddy 的建议尝试了 OutlookSpy,但我找不到像 IsGroup 这样的属性。

【问题讨论】:

  • OutlookSpy 是你的朋友 :)
  • @whosrdaddy:谢谢,我去看看。
  • 附带说明,在进入循环之前缓存 Items 集合,而不是在循环内使用多个点表示法 (Contacts.Items.Item(i)) - 每个“.”返回一个全新的 COM 对象。
  • @Dmitry:我不太清楚你的意思。我可以写得更短:Contacts.Items(i),这就是你的意思吗?否则,请随时改进问题中的代码。
  • 不,我的意思是您需要在进入循环之前将 Contacts.Items 的值存储在一个变量中(vItems := Contacts.Items),然后在循环中使用该变量(vItems.Item( i)) 而不是在每次迭代时调用 Contacts.Items。

标签: delphi outlook ole


【解决方案1】:

您可以像这样测试联系人的类:

const  
  olDistributionList = 69;

....

  Contact := ContactsRoot.Items(I);
  if (Contact.class = olDistributionList) then
    Memo1.Lines.Add(String(Contact) + ' is a contact group')
  else
    Memo1.Lines.Add(Contact.LastName + ' <' + Contact.Email1Address + '>');

字符串类型转换是必要的,因为用于连接字符串的 + 运算符不适用于作为 OleVariant 的 Contact。

【讨论】:

  • 使用 Contact.DLName 代替 String(Contact)。在假设该项目是联系人之前,您还需要(只是进行健全性检查)验证 Contact.Class = 40 (olContact)。
猜你喜欢
  • 1970-01-01
  • 2019-12-07
  • 2014-12-22
  • 1970-01-01
  • 2018-08-04
  • 2023-04-03
  • 2015-08-20
  • 1970-01-01
  • 2017-02-12
相关资源
最近更新 更多