利用自动化控制Outlook

Outlook对象模型结构如图1.31所示,最顶层的对象是Application,通过Application 对象可以使用其他所有的Outlook对象,另外Application 是唯一可以用CreateOleObject 函数创建的Outlook对象。下一个要说的是NameSpace 对象,它提供了对数据源的存取,在Outlook 98中MAPI消息存储是唯一的数据源。



  MAPIFolders集合对应一组MAPI文件夹,也就是一组MAPIFolder对象。每个MAPIFolder对象还包含一个Folders集合,每个集合中还包含一个管理Item对象的Items集合。图1.32是一个Delphi程序,它显示了MAPIFolders集合以及个人文件夹中的Folders集合和其中联系人目录的Items的内容。程序代码如下:



图1.32

  procedure TForm1.OpenBtnClick(Sender: TObject);

  var

   OutlookApp, Mapi,

   Contacts, Personal : Variant;

   I: Integer;

  begin

   { 获取Outlook Application 对象 }

   OutlookApp := CreateOleObject(’Outlook.Application’);

   { 获取 MAPI NameSpace对象 }

   Mapi := OutlookApp.GetNameSpace(’MAPI’);

   { 遍历MAPI 目录集合并添加目录名到列表框中}

   for I := 1 to Mapi.Folders.Count do

   MapiList.Items.Add(Mapi.Folders(I).Name);

   { 获取个人文件夹的目录集合}

   Personal := Mapi.Folders(’个人文件夹’);

   { 遍历个人文件夹的目录,并添加目录名到列表框中去 }

   for I := 1 to Personal.Folders.Count do

   PersonalList.Items.Add(Personal.Folders(I).Name);

   { 获取联系人目录}

   Contacts := Personal.Folders(’联系人’);

   { 获取联系人目录中的联系人人名列表 }

   for I := 1 to Contacts.Items.Count do

   ContactsList.Items.Add(Contacts.Items(I).FullName);

   { 关闭 Outlook. }

   OutlookApp := Unassigned;

  end;

  这里我们像vb那样使用后期绑定来调用Outlook。CreateOleObject 使用Outlook.Application (Outlook的类名)作为参数调用加载Outlook服务器并返回一个对Application对象的引用。通过Application对象可以获得对其他Outlook对象的引用。调用Application对象的GetNameSpace方法会返回NameSpace对象(注意调用参数为MAPI)。通过NameSpace 对象,代码遍历了MAPIFolders 集合然后添加了每个目录的名字到MapiList列表框。

  正如在图1.32中看到的,MAPIFolders集合中包含有一个个人文件夹,接下来代码就获得了对个人文件夹的引用Personal := Mapi.Folders(’个人文件夹’);然后是再用一个循环获得个人文件夹中的全部目录名,最后是获得联系人目录,并由Items 集合获得全部联系人目录中的人名(通过FullName属性获得)。

  很明显要想掌握控制Outlook的方法,我们必须清楚Outlook的对象继承关系以及每个对象的属性、方法和事件。Outlook提供了一个帮助文件vbAOUTL.HLP,其中包括了相关信息。

  下面的代码演示了如何搜索联系人目录,并把内容复制到一个数据库中:

  procedure TLoadTableForm.LoadBtnClick(Sender: TObject);

  var

   OutlookApp, Mapi,

   ContactItems, CurrentContact: Variant;

  begin

   OutlookApp := CreateOleObject(’Outlook.Application’);

   Mapi := OutlookApp.GetNameSpace(’MAPI’);

   { 获取联系人目录的Items集合 }

   ContactItems := Mapi.Folders(’个人文件夹’).Folders(’联系人’).Items;

   { 加载到数据库中 }

   with ContactTable do

   begin

    EmptyTable;

    Open;

    DisableControls;

    CurrentContact := ContactItems.Find(’[CompanyName] = ’ +

    QuotedStr(’Borland International’));

    while not VarIsEmpty(CurrentContact) do

    begin

     Insert;

     FieldByName(’EntryId’).AsString :=

     CurrentContact.EntryId;

     FieldByName(’LastName’).AsString :=

     CurrentContact.LastName;

     FieldByName(’FirstName’).AsString :=

     CurrentContact.FirstName;

     FieldByName(’CompanyName’).AsString :=

     CurrentContact.CompanyName;

     FieldByName(’BusAddrStreet’).AsString :=

     CurrentContact.BusinessAddressStreet;

     FieldByName(’BusAddrPOBox’).AsString :=

     CurrentContact.BusinessAddressPostOfficeBox;

     FieldByName(’BusAddrCity’).AsString :=

     CurrentContact.BusinessAddressCity;

     FieldByName(’BusAddrState’).AsString :=

     CurrentContact.BusinessAddressState;

     FieldByName(’BusAddrPostalCode’).AsString :=

     CurrentContact.BusinessAddressPostalCode;

     FieldByName(’BusinessPhone’).AsString :=

     CurrentContact.BusinessTelephoneNumber;

     Post;

     CurrentContact := ContactItems.FindNext;

    end; // while

    EnableControls;

   end; // with

   { 关闭Outlook }

   OutlookApp := Unassigned;

  end;

  上面代码运行的基本步骤同前面的一样,不同之处在于先获取联系人目录的Items集合,然后调用Find 方法根据属性的组合来定位集合中特殊的项目,比如:

  CurrentContact := ContactItems.Find(’ [CompanyName] = ’ +
共4页 首页 上一页 [1] [2] [3] [4下一页 尾页>
相关信息
相关评论
字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z