荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Peter (小飞侠), 信区: Program
标  题: MAPI实现Outlook"入库"程序
发信站: BBS 荔园晨风站 (Thu Jan 21 22:51:20 1999), 转信


  Visual Basic(以下简称VB)的MAPI是邮件传输的应用程序编程接口
,是通过邮件系统(例如:Exchange、Microsoft Mail)传递消息的函数
集合。MAPI 为客户端程序和邮件系统提供独立的API接口。通过使用
MAPI协议的消息传递,应用程序可以调用符合该协议的消息传递服务

    VB按照其能够实现的功能强弱,将有关消息传递的编程分为三种
类型:VB Controls(控件)即Simple Mapi、OLE Messaging 和直接调
用 MAPI。VB Controls是最基本的应用,只需要为现成的两个发送邮
件的控件设置属性和使用一些"方法"(Method)就能完成简单的发送和
接收邮件的功能。OLE Messaging是微软提供的OLE Messaging对象层
,可以使用标准的OLE At omation命令来和OLE Messaging对象发生联
系,从而实现邮件传输的应用。还可以说明一个MAPI动态链接库,直接
调用 MAPI。这种方法提供最大的灵活性,也最难使用。
    考虑到程序的功能和今后的扩充,本文介绍的程序采用的是OLE M
essaging。这里所谓的"库"是指Outlook的一个文件夹(最大为4GB)。
该应用程序要实现的是:将本地磁盘某目录下的文件自动分发,放入指
定联网用户Outlook中指定的不同文件夹中。
    下面依次介绍一下每部分的实现算法,并给出MAPI关键部分的程
序代码。
    搜寻文件
    为了便于程序监控和管理,首先可以用VB做一个窗口,监视文件的
传送情况。实际运用时,要提高程序效率可舍去此窗口。该窗口由一
个目录框、两个文本框和两个按钮组成。用目录框选择文件传送来源
的路径;一个文本框显示传送的文件名,另一个文本框显示传送的文件
内容;一个按钮用于启动,另一个用于取消运行。这些用VB的控件很容
易实现,这里就不一一赘述。
    实现在本地磁盘搜寻指定目录及其子目录下文件的过程为search
(filepath),其中filp ath为全局变量,用来传递目录框中所选择的路
径。该函数的实现关键是循环调用VB的函数D IR。
    filename = Dir(filepath, vbNormal)   ’filename是取到的
文件名
    Do While filename <> ""
    If filename <> "." And filename <> ".." Then
    ……’按照文件名的分类送往不同文件夹’分别取出filename对
应的文件的标题和正文并进行传送
    End If
    filename = Dir
    Loop
    我们可以根据文件名的固定标识符分类,利用Case语句将它们分
别传往不同的文件夹(稍做修改也可传给不同的人),文件夹的名称作
为传递过程send_doc的参数。
    分别取出filename对应的文件标题的函数为get_title(fullpath
)、get_content(fulp ath) ,其中fullpath=filepath & filename。
这两个函数的值将会传给send_doc中的 Mai的调用函数,也可以同时
传给监控窗口的两个文本框。
    过程send_doc是该程序的关键所在,其中在Outlook中寻找文件夹
又是关键之关键。有两种算法可以实现这个功能,下面分别加以介绍


    修改Exchange设置
    第一种方法是在服务器上修改Exchange的设置,把所有目的文件
夹设为共享,然后直接把文件夹名赋给objRecip.Name进行传送。这种
方法的好处是简单易行,易于理解;缺点是需要改变系统设置。
    主要代码如下:
    Sub Send_Doc(fullpath, foldername)
     ’foldername是全局变量,代表文件夹的名字
     Dim mysession As Object
     Set mysession = CreateObject("mapi.session")  ’创建一
个Mapi session对象
     If Not mysession IsNothing Then
        mysession.Logon Profilename:="MS Exchange 设置"   ’
设配置文件
     Else
        MsgBox " No session", 16
     End If
     Set objMessage = mysession.Inbox..Messages.Ad  ’创建一
个message
     If Not objMessage Is Nothing Then
     objMessage.Text = get_content(fullpath)  ’正文赋值
     objMessage.Subject = get_title(fullpath)  ’标题赋值
     Else
     MsgBox "No Message", 16
     End If
     Set objRecip = objMessage.Recipients.Add’创建接收者
     objRecip.Name = foldername
     objRecip.Type = mapiTo
     objRecip.Resolve
     objMessage.Update
     objMessage.Send                ’传送
     End Sub

    递归算法
    第二种实现方法是利用递归算法在Outlook中搜索目的文件夹。
这种方法的好处是不必修改系统设置,弊端是程序量大,算法相对复杂
难懂。体现算法的主要代码如下:
    ’寻找根文件夹,该函数返回根文件夹
    Dim InfoStoresCollIndex As Long
    Set objInfoStoresColl = objsession.InfoStores
    If objInfoStoresColl Is Nothing Then
      MsgBox "Cannot set InfoStores collection"
      Exit Function
    End If
    For InfoStoresCollIndex = 1 To objInfoStoresColl.count
    Set objInfoStore = objInfoStoresColl.Item([InfoStoresCol
lIndex])
    If objInfoStore Is Nothing Then
        MsgBox "Cannot get this InfoStore object"
    End If
    If rootfoldername = objInfoStore.Name Then
        Set objRootFolder = objInfoStore.RootFolder
        If objRootFolder Is Nothing Then
            MsgBox "Error in setting RootFolder"
        End If
        Exit Function
    End IfNext InfoStoresCollIndex’以根文件夹为基础,寻找目
标文件夹
    Dim objFoldersColl As Object
    Dim objOneSubfolder As Object
    If Not objParentFolder Is Nothing Then
      MsgBox ("folder name: " & objParentFolder.Name)
      Set objFoldersColl = objParentFolder.Folders
      If Not objFoldersColl Is Nothing Then
        Set objOneSubfolder = objFoldersColl.GetFirst
        While Not objOneSubfolder Is Nothing
          If (fdname = objOneSubfolder.Name) Then
             Set objFolder = objOneSubfolder
          End If
          x = Util_getobjfolderByname(fdname, objOneSubfolde
r)
               ’该函数完成与目标文件夹的名字相比较,获得目标
文件夹
         Set objOneSubfolder = objFoldersColl.GetNext
        Wend
    End IfEnd IfMAPI调用部分的程序与第一种方法类似,只是有些
对象要加以改动,比如n box,读者可以自己试一下。
    该程序十分实用,作为一个接口可以与用目录管理的系统进行自
动信息交换和分发。该程序还能扩充许多其它MAPI的功能,与Outlook
其它应用相配合完成许多自动化的工作,从而大大加强Outlook与其它
系统的合同协作能力。而且,只要稍做修改,它便可运行于Exchang中,
完成邮件自动分发到个人邮箱等功能。

--
※ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.1.3]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店