荔园在线

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

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


发信人: Peter (小飞侠), 信区: Program
标  题: 用MAPI函数发送和获取电子邮件
发信站: BBS 荔园晨风站 (Wed Jan 27 17:51:03 1999), 转信


   MS Visual FoxPro 3.0提供了邮件的应用编程接口MAPI,在Window
s 95环境下使用MAPI 控制可以容易地发送和接受信息,但是只有运行
Windows NT或Windows 95时才安装MAPI控制。我们用户的使用环境都
是Windows 3.2,并使用MS Mail电子邮件发送和接受信息。在这种情
况下,用调用MAPI函数的方法,可使Visual FoxPro 3.0开发的应用软
件具有电子邮件功能。
    假如你的机器已联到网上,让我们来看一看如何使用MAPI函数来
接收和发送电子邮件。在Visual FoxPro 3.0下建立一个新的表单,该
表单包含两个命令按钮,这两个按钮分别定义为接收和发送。
    ·接收按钮可以接收发送给你的来自各地的邮件;
    ·发送按钮可以发送你的信息;
    ·这两个按钮可以放在你的任一表单中,执行时只需按下该按钮
就可以接收和发送消息。

    用MAPI函数来获取电子邮件
    如果你想编写程序来处理你的邮件,那么你应该先登记,用邮件管
理系统为自己设置一个帐户。假如你以自己的名义注册,注册需调用
函数MPLogon,在按钮的Click事件中,写入:
    session=10
    a=mplogon(0,"UserName","Password",2,0,@session)
    _screen.print(a)
    如果屏幕上a的返回值为零,表示你已正确地注了册。
    MPLogon函数中的参数Flags的值决定了是用一个新的话路登记,
还是用一个已经存在的话路来登记。换句话说,如果你在运行应用程
序时已登录到Mail,而且Flags设置为1,那么你将使用和Mail相同的注
册;如果Flags设置为2,表示用一个新的话路注册。
    MPLogon函数中的UserName和Password限定了MAPI的用户姓名和
密码,同样在Windows目录下滞留的MSMAIL.INI中也如此定义。注意这
通常不同于你用来登录网络时用的用户姓名和密码。
    下一步要做的是编写阅读和处理信息的代码,假如你告知MAPI函
数去"获取"消息,必须先用函数MPFindnext去找消息的标识。MPFindn
ext返回一个特定话路的ID值,为下一次调用MA PI函数提供信息标识
。如果函数MPFindnext的参数SeedMes-sageID为空,函数MPFindnext
返回邮箱信件的第一个信息标识;如果它不为空,该函数返回与此相关
的邮件信息标识,直到返回值为16,表示已经遍历了所有的信息。函数
MPFindnext被设计用来处理收到的邮件,而不是用来管理收到的邮件,
它在文件夹中找消息,并只在用MPLogon建立的有效话路中有效。
    参数Flags的值决定了查找邮件的方式。如果Flags的值为256,则
按先进先出(FIFO)的顺序返回信息标识的ID值,当然这种方式要花较
长时间;如果Flags的值为32,则只返回未读邮件的ID值。有了该ID值,
就可以用函数MPReadmail来读邮件了。
    调用函数MPReadmail返回一条信息,该信息包含邮件的主题、记
事文本、发送人的姓名和地址、附件及附件的名字等信息,附件保存
在临时文件的目录中。函数MPReadmail的参数Flags用来规定返回调
用者的信息,以便用Visual FoxPro来处理。如果Flags为64,调用者不
让函数拷贝附件到临时文件中,并且也不返回邮件的记事文本文件,这
个配置减少了函数处理的时间;如果Flags为2048,让函数返回记事文
本文件及其他的信息;如果Flags为512,则让函数返回全部的信息。下
面的过程包含了上述函数的调用方法。该过程以邮箱名UserName,口
令Password注册,正确注册后,用函数MPFindnext返回第一个邮件的ID
值,用函数MPReadmail 读取此邮件,如果有附件则将附件的路径和名
字保存在Name1中。
    PROCEDURE Rcvmail
    PARAMETER logonuser,password
    set library to c:\vfp\tools\mapi\foxmapi
    session=10
    a=mplogon(0,UserName,password,1,0,@session)
    if a◇0
    =messagebox("接收邮件失败:无法注册",48,"接收邮件")
    endif
    declare arrayrecip(10),arrayfile(10)
    arrayrecip(1)="myrecip"
    arrayfile(1)="myfile"
    =mpcursor("MapiMesg","mymesg")
    =mpcursor("MapiRecip","myrecip")
    =mpcursor("MapiRecip","myorig")
    =mpcursor("mapifile","my-file")
    id="
    mesgid="
    b=mpfindnext(1,0,",id,256,0,@MesgID)
    id=MesgID
    a=mpreadmail(1,0,ID,128,0,"mymesg",'myorig',arrayrecip,a
rrayfile)
    sele myfile
    if myfile.pathname◇""
        store myfile.pathname to name1
    endif
    a=mplogoff(session,0,0,0)

    用MAPI函数来发送电子邮件
    调用下面的过程可以将包含附件的邮件发送到任一邮局的任一信
箱中。像接受邮件一要,需要以自己的UserName和Password注册,将发
送附件的路径及文件名、收件人的邮局名和网络名、收件人的邮箱分
别写入MAPI Cursor中,然后调用函数MpSendmail,即可将邮件发送到
指定网络的邮箱中。
    PROCEDURE Sendmail
    PARAMETERS attachfile,recv-name,recvaddress
    set default to c:\vfp\tools\mapi
    set library to foxmapi
    session=10
    a=mplogon(-1,",",1,0,@session)
    if a◇0
    =MessageBox("邮件发送失败:无法注册",48,"错误")
    endif
    =mpcursor
    ("MapiMesg","mymesg")
    =mpcursor("MapiRecip","myrecip")
    =mpcursor("MapiFile","my-file")
    select mymesg
    append blank
    replace reserved with 0
    replace subject with "CRE.R.DA-TA"
    replace messagtype with "IPM.Microsoft.Note"
    replace flags with 1
    replace recipcount with 1
    replace filecount with 1
    sele myfile
    append blank
    replace reserved with 0
    replace flags with 0
    replace position with -1
    replace pathname with attachfile
    SELE MYRECIP
    APPEND BLANK
    replace RESERVED with 0
    replace RECIPCLASS with 1
    replace NAME with recvname
    replace ADDRESS with recvaddress
    a=mpsendmail(session,0,'mymesg','myrecip','myfile',1,0)
    a=mplogoff(session,0,0,0)
    if a=0
    =MessageBox("邮件已成功发出!",64,"发送邮件")
    return.T.
    else
    =MessageBox("邮件发送失败:发送时出错",48,"错误")
    return.F.
    endif

    调用MAPI函数的技巧
    第一要注意到FOXMAPI的存在,如SET LIBRARY TO C:\VFP\TOOLS\
MAPI\FOXMAPI;
    第二在读MAPI函数的帮助时,如果说某参数是对某数字或某字符
的引用,则要在该参数前加符号@;
    第三要理解MAPI Cursor的结构,MAPI Cursor实际上是MAPI建立
的临时数据库,用于存储与邮件有关的各类信息,如Mapi-File存储文
件附件的信息,MapiMesage存储信件的信息,Map iRecip存储收件人的
信息。在调用MAPI函数发送邮件时,只有正确填写这三类Cursor,才能
正确地调用这类函数;
    第四要正确理解MAPI函数的各个参数的意义,如函数MPReadmail
的参数Re-cips()和Fil es()在调用之前,要声用明为数组的一个元素
,在调用时才能不出错。
    假如你已用Visual FoxPro 3.0建立了一个表单,此表单包含两个
按钮,两个按钮的名字是接受邮件和发送邮件,在这两个按钮的Click
事件中,分别调用上述的过程Rcv-mail和Send mail,则可在你编制的
程序中正确地接受和发送电子邮件了。

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


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

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