现在得点分真不容易~~。
老兄似乎对通信组(您所说的联系人组)的概念不是特别清楚:通信组只是一个电子邮件地址列表(它的作用就是为了方便发邮件,如果您的联系人没有邮件地址,根本不让加到通信组里),不包含任何其他内容(如电话、住址、传真);它的条目有两种:一种来自已有的联系人,一种仅仅是电子邮件地址。
您想读取联系人的扩展信息当然对电子邮件地址类的 DistListItem 不起作用,因此必须区别对待;至于联系人的扩展信息在 DistListItem 显然找不到,必须到 ContactItem 中去找。下面是我应您所求改完的一段代码:
procedure GetDistListMembers(const DistListName: string);
const
olFolderContacts = $0000000A;
olDistributionList = $00000045;
Return = #13#10;
var
olapp, olcf, oldl, olae, olci: OleVariant;
i: Integer;
s: string;
begin
try
olapp := CreateOleObject('Outlook.Application');
olcf := olapp.GetNameSpace('MAPI').GetDefaultFolder(olFolderContacts);
oldl := olcf.Items[DistListName];
if oldl.Class = olDistributionList then
for i := 1 to oldl.MemberCount do
begin
olae := oldl.GetMember.AddressEntry;
s := '显示名称: ' + olae.Name + Return + '电子邮件地址: ' + olae.Address
+ Return + '电子邮件类型: ' + olae.Type;
olci := olcf.Items.Find('[Email1DisplayName] = ''' + olae.Name + '''');
if TVarData(olci).VDispatch <> nil then
s := s + Return + '邮编: ' + olci.MailingAddressPostalCode + Return +
'商务电话: ' + olci.BusinessTelephoneNumber + Return + '移动电话: ' +
olci.MobileTelephoneNumber;
ShowMessage(s);
end;
finally
oldl := Unassigned;
olcf := Unassigned;
olapp := Unassigned;
end;
end;