高分求教delphi读取 outlook express 通讯簿记录的代码 ( 积分: 100 )

  • 主题发起人 dayoohero
  • 开始时间
D

dayoohero

Unregistered / Unconfirmed
GUEST, unregistred user!
调用windows dll wab32.dll 来读outlook express 的代码.
或能直接读.wab 文件的代码.
急用!!
 
调用windows dll wab32.dll 来读outlook express 的代码.
或能直接读.wab 文件的代码.
急用!!
 
Microsoft Outlook是可编程桌面信息管理程序。由于Microsoft Outlook本身不包含Visual Basic for Applications,但包括完整的类型库(type library)和Visual Basic Scripting Edition (VBScript),因此,Outlook对象编程可以采用两种方法:即VBScript脚本编程方法和Automation自动化编程方法。
VBScript脚本编程方法一般用于设计基于Outlook的本地化解决方案;而Automation(或OLE Automation)自动化编程方法则是用于建立用户自己的群件或邮件系统。可以使用早期绑定或后期绑定来开始一个Automation过程。本文将以后期绑定为例介绍在Delphi 5编程环境下,Outlook的Automation对象编程方法。
Outlook对象模型
Outlook基于Microsoft Exchange消息系统,更具体地说是基于MAPI(Messaging Application Programming Interface)来存储数据。若将Outlook安装到一台没有其他任何消息组件的计算机中,则安装程序会自动安装基于MAPI的Microsoft Exchange消息系统。
与任何一种消息系统一样,Microsoft Exchange使用一个层次化的文件夹(Folder)集合来存储数据。文件夹可以包含子文件夹(如收件箱、发件箱等)和条目(Item)(如邮件消息、约会、联系人和任务等)。正是由于这种不确定性,使Outlook编程与以文档为中心的其他Office产品编程相比更具挑战性,是所有Microsoft Office程序中对象编程最复杂的一种。Automation解决方案在很大程度上就是在这种文件夹层次中导航。
在Outlook对象模型中,Application对象包含NameSpace对象;NameSpace对象包含给定数据源(如MAPI消息库)中所有文件夹,即MAPIFolder对象集合;MAPIFolder对象包含该文件夹中所有条目对象;每个条目对象包含用于对其进行控制的可编程对象。
各对象含义如下:
●Application对象是整个模型的根对象,由CreateOleObject或GetActiveOleObject 函数返回;
●NameSpace对象代表任何可识别数据源,如MAPI消息库;
●Folders对象集合包括指定消息库(或任何可识别数据源)及其下级文件夹中所有的MAPIFolder文件夹对象;
●Items对象集合包括指定文件夹中所有Item条目对象;
●Explorer对象用于显示一个文件夹的窗口;
●Inspector对象用于显示一个条目的窗口。
Outlook对象编程步骤
1.在Delphi 5中,采用后期绑定来初始化一个Automation过程时,建议引用outlook8.pas单元,该单元包括Outlook类型库中所用常量定义。
2.建立一个Application类的实例。
3.调用GetNamespace过程指定要使用的名字空间。
若使用后期绑定,则所有对象变量均必须为Variant类型,如OutlookApplication, OutlookNameSpace等。
OutlookNameSpace:=Outlook.GetNamespace
(‘MAPI’)

4.调用Outlook名字空间的Logon 方法登记到邮件系统。该方法的四个参数的含义分别为Microsoft Exchange Profile文件名、口令、是否显示标准登录对话框、是否建立一个新的Microsoft Exchange会话。例如:
OutlookNameSpace.Logon(ProfileStr, PasswordStr, False, True);
5.调用Outlook名字空间的GetDefaultFolder方法返回所请求的默认的MapiFolder文件夹对象(即MAPI名字空间内的一个文件夹)。例如,将默认的Contacts文件夹对象赋给OutlookFolder变量的方法如下:
OutlookFolder := OutlookNameSpace.
GetDefaultFolder(olFolderContacts)

又如,下列语句可以显示发件箱文件夹名称:
Caption := Variant(OutlookNameSpace.
GetDefaultFolder(olFolderOutbox))

此外,还可以使用文件夹集合Folders(索引)方法查找文件夹。这是查找自定义、非标准文件夹的唯一方法。如:
urgentFolder := olMAPI.Folders(“Mailbox - Zhang Chunming”).Folders(“Urgent”)

下面例子显示收件人ZhangChunming的共享日历文件夹:
OutlookReciepientItem := OutlookNameSpace.
CreateRecipient(‘ZhangChunming’)

OutlookReciepientItem.Resolve

if OutlookReciepientItem.Resolved <> 0 then
begin
OutlookFolder := OutlookNameSpace.
GetSharedDefaultFolder(OutlookReciepientItem,
olFolderCalendar)

OutlookFolder.Display;
end

6.用MAPIFolder对象的Items属性返回该对象包含的条目对象集合。
有三种方法可以返回指定的条目对象:
●可以用Items(名字)方法返回指定的条目对象。如:下面语句返回指定文件夹中题目为“会议通知”的条目对象:
  OutlookMailItem:=OutlookFolder.Items(‘会议通知’)

●也可以用Items(索引)方法返回指定的条目对象。返回指定文件夹中第一个条目对象的方法如下:
  OutlookMailItem := OutlookFolder.Items(1)

下面例子遍历指定文件夹(MAPIFolder对象)中所有条目对象集合,并显示条目主题。
for i := 1 to OutlookFolder.Items.Count do
begin
Caption := Caption +‘-’ + String(OutlookFolder.Items)

OutlookFolder.Items.Display;
end

注意:若指定文件夹不包括任何条目,则Items对象集合的Count属性为0。
●还可以用Items条目集合的Find方法查找条目。这是在Outlook文件夹中查找那些没有唯一标识的条目的唯一可行的方法。如:
OutlookMailItem := OutlookFolder.Items.Find(‘[Subject] = “会议通知”’)

一旦找到满足搜索条件的第一个条目,可以用FindNext方法继续搜索其余条目。
有两种方法可以建立新条目对象:
●用Application对象的CreateItem方法创建默认条目对象,如AppointmentItem、ContactItem、JournalItem、MailItem、NoteItem、PostItem或TaskItem等。Outlook自动将新建条目保存到默认文件夹中。下面语句创建一个新邮件:
OutlookMailItem := Outlook.CreateItem
(olMailItem)

下面语句创建一个新联系人:
OutlookContactItem := Outlook.CreateItem(olContactItem)

●用Items对象集合的Add方法创建指定类型的条目对象。若未指定条目对象类型,则默认为父文件夹条目对象类型。若该文件夹从未指定类型,则默认条目对象类型为MailItem。下面语句将在当前Contacts文件夹中新建一个ContactItem条目。
OutlookContactItem := Outlook.GetNamespace
(‘MAPI’).GetDefaultFolder (olFolderContacts)
.Items.Add

也可以如下所示分成几行语句完成:
OutlookNameSpace := Outlook.GetNamespace(‘MAPI’)

OutlookFolder := OutlookNameSpace.
GetDefaultFolder(olFolderContacts)

OutlookContactItem := OutlookFolder.Items.Add(olContactItem);
还可以使用自定义表单向当前Contacts文件夹中加入新联系人,如:
OutlookFolder := OutlookNameSpace.
GetDefaultFolder(olFolderContacts)

OutlookContact := OutlookFolder.Items.Add(‘IPM.Contact.MyForm’)

最后,调用Item对象的Save或Send方法保存或发送新建条目。
不论是MAPIFolder对象还是Item对象,均可以调用Display方法显示对应的窗口。如OutlookContactFolder.Display可以显示联系人文件夹,OutlookTaskItem.Display可以显示任务条窗口等。
OutlookTaskItem.Display

编程实例:创建并发送一个新邮件消息
首先调用发件箱文件夹Items条目对象集合的Add方法创建新邮件条目对象(olMailItem类型);其次调用Recipients 对象集合的Add方法来创建一个收件人,调用Attachments对象集合的Add方法来增加一个附件;然后设置邮件消息的Subject(主题)、Body(正文)(事实上所有Outlook对象都有主题和正文属性)、To(收件人)等属性;最后调用Send方法发送邮件。
完整的程序清单如下所示:
procedure SendMail

var
Outlook: variant;{ Application }
OutlookNameSpace: variant;{ NameSpace }
OutlookFolder: variant;{ MAPIFolder }
OutlookMailItem: variant;{ MailItem }
OutlookRecipient: variant;{ Recipient }
OutlookAttachment: variant;{ Attachment }
begin
try
Outlook:=CreateOleObject(‘Outlook.
Application’)

except
ShowMessage(‘无法启动Microsoft Outlook!’)

Exit

end

try
OutlookNameSpace := Outlook.GetNamespace(‘MAPI’)

{ 创建新邮件消息 }
OutlookFolder := OutlookNameSpace.GetDefault
Folder(olFolderOutbox)

{ 增加收件人(若地址薄中已有此人,则仅用其名字即可,否则必须包括完整地址,如OutlookNameSpace.CurrentUser.Address)}
OutlookMailItem := OutlookFolder.Items.Add(olMailItem)

OutlookRecipient := OutlookMailItem.
Recipients.
Add(‘ZhangChunming’)

OutlookRecipient.Type := olTo

if not OutlookRecipient.Resolve then
begin
ShowMessage(‘无法解析地址!’);
Exit

end

{ 插入附件(确保路径正确) }
OutlookAttachment := OutlookMailItem.
Attachments.Add(‘c:/readme.txt’)

OutlookAttachment.DisplayName := ‘样本附件’

{ 设置邮件主题、邮件正文和重要性 }
OutlookMailItem.Subject := ‘邮件主题’

OutlookMailItem.Body := ‘此处为邮件内容’

OutlookMailItem.Importance := olImportanceHigh;
OutlookMailItem.Send

finally
OutlookRecipient := Unassigned

OutlookAttachment := Unassigned

OutlookMailItem := Unassigned

OutlookFolder := Unassigned;
OutlookNameSpace := Unassigned;
Outlook := Unassigned;
end;
注意:为避免程序运行时产生异常,程序做了相应的异常处理,如:调用收件人的Resolve方法以确保收件人的有效性等。

*)
 
楼上回答的好象是用来收发邮件的程序,我想要的是读取通信簿的,不知道有没有?
 
找到个组件 wab_processor 是个老外的,可惜要收费.
谁有的话,能不能共享出来.
 
ftp://delphi-jedi.org/api/WAB.zip
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
933
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
顶部