在VB、VFP应用系统中收发邮件[1]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 showman 的 blog

在vb、vfp应用系统中收发邮件
      e-mail是internet/intranet网上通信的最主要的方式之一,充分利用e-mail 的功能可以极大地提高企业的工作效率,减轻用户的工作负担。windows 95中提供了一个名为exchange的电子邮件客户程序,它包含了收件箱、发件箱、收发消息、消息优先级等功能,广泛支持超文本消息、收发传真和internet邮件等内容,可以在lan、microsoft fax、远程邮件、internet等多种软件环境中工作。在vfp、vb开发的应用系统中结合exchange的邮件服务功能,可以使您的应用系统功能更强大、服务更完善、使用更方便。下面介绍vb、vfp的mapi控件以及在vb、vfp应用系统中使用这些控件收发e-mail的方法。

   一.mapi控件概述

   mapi(通信应用程序接口)控件,即msmapi32.ocx,包括两个ole控件:mapisession(mapi工作期)控件和mapimessage(mapi消息)控件。mapisession控件的功能是负责建立会话、取消会话的一个mapi工作期。mapimessage控件则提供了发送、接收等所有对电子邮件进行处理的功能。

   mapisession控件用来注册一个新工作期和注销当前工作期。注册时,首先

  用mapisession控件的signon方法建立与e-mail服务器的会话连接,显示完注册对话框后,sessionid属性包含了刚注册的mapisession的句柄。此句柄最终必须传递给mapimessage控件,在结束当前mapisession工作期之前,必须先注销该工作期。然后再用mapimessage控件的sessionid属性同有效的会话联系起来,执行一系列消息系统函数,实现收发邮件的功能。

   二.mapi控件的主要属性

   (1)mapisession控件的属性:

   action属性:当mapisession控件被激活时,该属性将决定执行什么操作。

   logonui属性:该属性指定是否显示注册对话框。当其值为“真”时,则出

  现一个对话框提示新用户输入用户名和口令;当其值为“假”时,则不显示对话框。

   sessionid属性:返回当前的消息会话句柄。指定signon方法时,可以设置该属性的值。使用mapimessage控件处理消息时,需要使用此会话句柄,其缺省值为0。

   signon方法:将用户登录到username和password属性所指定的帐户中,并将会话句柄存储到属性sessionid中。

   signoff方法:结束消息会话,从username和password属性所指定的帐户中

  退出。

   (2)mapimessage控件的属性:

   action属性:当mapimessage控件被激活时,该属性决定将执行什么操作。

   sessionid属性:存储由mapisession控件的sessionid属性返回的消息会话句柄。

   fetchsorted属性:在用收件箱中的消息填充消息集合时,指定或返回消息的排序。当其值为“真”时,按接收消息的顺序向消息集合添加消息;当其值为“假”时,由用户收件箱中的排序添加消息。

   fetchunreadonly属性:决定是否将消息集合中的消息限定为未读消息。当其值为“真”时,只向消息集合添加fetchmsgtype属性指定的未读消息;当其值为“假”时,添加收件箱中适当类型的全部消息。

   msgcount属性:用于在消息工作期间返回存在于消息设置中的消息的总数。

   msgindex属性:指定当前索引消息的索引编号。在索引改变时,所有消息的其它属性也随之改变,以反映索引消息的特征。索引号的范围是从-1到msgcount-1。

   msgorigdisplayname属性:返回当前索引消息的原始发件人的名字。

   msgorigaddress属性:返回当前索引消息的原始发件人的邮件地址。

   recipdisplayname、recipaddress、msgsubject、msgnotetext属性:分别指定当前索引的收件人姓名、收件人的邮件地址、主题、文本行,构成一条完整的消息。

   send方法:发送一条消息。它带有一个参数ndialog,当ndialog为“真”时,显示exchange邮件系统的操作界面,由用户输入消息的各个部分,并将消息提交邮件服务器传送;当ndialog为“假”时,则不显示相应的操作界面,而将消息提交给邮件服务器。

   reply方法:响应一个消息。将当前索引的消息复制到构成缓冲区中,并将re:加入标题行的开始,同时将msgindex属性设置为-1。

   delete方法:删除一个消息、收件人或附件。

   compose方法:构成一条消息。

   fetch方法:由收件箱中选择的消息创建一个消息集合。

  

   三.应用实例

   ★应用实例一:用vb 5.0的mapi控件收发邮件。

  1. 插入mapi控件的方法:

  在vb 5.0主菜单的“工程”项中选择“部件(0)”,在弹出的控件栏中,双击“microsoft mapi control 5.0”项,按“确定”键返回。那么,在窗体工具箱中就有了上述控件。

  2.建立含有如下控件的窗体:

   控件 name caption

   主窗体 frmmail 用vb 5.0的mapi控件收发邮件

   mapisession控件 mailsess

   mapimessage控件 mailmess

   命令按钮 cmdnewmail 发件箱

   命令按钮 cmdgetmail 收件箱

   命令按钮 cmdexit 退出

   子窗体 frmnewmail 发件箱

   标签 label1 收件人:

   标签 label2 主题:

   文本框 text1 '输入收件人的电子邮件地址

   文本框 text2 '输入文本的主题

   文本框 text3 '输入文本内容

   命令按钮 mailsend 发送邮件

   子窗体 frmgetmail 收件箱

   标签 label1 发件人:

   标签 label2 主题:

   文本框 text1 '发件人的电子邮件地址

   文本框 text2 '发来的文本主题

   文本框 text3 '发来的文本内容

   命令按钮 cmdprevious 向前

   命令按钮 cmdnext 向后

  

   输入主窗体“发件箱”按钮的程序代码:

   private sub cmdnewmail_click()

   frmnewmail.show

   end sub

  

   输入主窗体“收件箱”按钮的程序代码:

   private sub cmdgetmail_click()

   frmgetmail.show

   end sub

  

   输入主窗体“退出”按钮的程序代码:

   private sub cmdexit_click()

   frmmail.mailsess.signoff '断开连接

   end

   end sub

  

   输入frmnewmail子窗体“发送邮件”按钮的程序代码:

   private sub mailsend_click()

   frmmail.mailsess.signon '建立连接

   frmmail.mailmess.sessionid = frmmail.mailsess.sessionid

   frmmail.mailmess.msgindex = -1

   frmmail.mailmess.recipdisplayname = text1.text

   frmmail.mailmess.msgsubject = text2.text

   frmmail.mailmess.msgnotetext = text3.text

   frmmail.mailmess.send (false)

   frmmail.mailsess.signoff

   end sub

  

   输入frmgetmail子窗体装入的程序代码:

   private sub form_load()

   dim mailindex, mailcounts as integer

   frmmail.mailsess.signon

   frmmail.mailmess.sessionid = frmmail.mailsess.sessionid

   frmmail.mailmess.fetchsorted = true

   frmmail.mailmess.fetchunreadonly = true

   frmmail.mailmess.action = 1

   mailcounts = frmmail.mailmess.msgcount

   if mailcounts = 0 then

   text3.text = "收件箱中没有邮件!"

   frmgetmail.cmdprevious.enabled = false

   frmgetmail.cmdnext.enabled = false

   else

   frmgetmail.mailmess.msgindex = 0

   frmgetmail.text1.text = frmmail.mailmess.msgorigaddress

   frmgetmail.text2.text = frmmail.mailmess.msgsubject

   frmgetmail.text3.text = frmmail.mailmess.msgnotetext

   end if

   end sub

  

   输入frmgetmail子窗体“向前”按钮的程序代码:

   private sub cmdprevious_click()

   mailindex = frmgetmail.mailmess.msgindex

   frmgetmail.mailmess.msgindex = mailindex - 1

   frmgetmail.text1.text = frmmail.mailmess.msgorigaddress

   frmgetmail.text2.text = frmmail.mailmess.msgsubject

   frmgetmail.text3.text = frmmail.mailmess.msgnotetext

   if mailindex = 0 then

   frmgetmail.cmdprevious.enabled = false

   end if

   end sub

  

   输入frmgetmail子窗体“向后”按钮的程序代码:

   private sub cmdnext_click()

   mailcounts = frmgetmail.mailmess.msgcount - 1

   mailindex = frmgetmail.mailmess.msgindex

   frmgetmail.mailmess.msgindex = mailindex + 1

   frmgetmail.text1.text = frmmail.mailmess.msgorigaddress

   frmgetmail.text2.text = frmmail.mailmess.msgsubject

   frmgetmail.text3.text = frmmail.mailmess.msgnotetext

   if mailindex = mailcounts then

   frmgetmail.cmdnext.enabled = false

   end if

   end sub

  

   ★应用实例二:用vfp 5.0的mapi控件收发邮件。

  1. 插入mapi控件的方法:

  在vfp 5.0主菜单的“工具”项中选择“选项”,在弹出的控件栏中,双击“microsoft mapi control 5.0”项,那么,在窗体工具箱中就有了上述控件。

  2.建立含有如下控件的窗体:

   控件 name caption

   窗体 frmmail 用vfp 5.0的mapi控件收发邮件

   mapisession控件 mailsess

   mapimessage控件 mailmess

   命令按钮 command1 发件箱

   命令按钮 command2 收件箱

   命令按钮 command3 退出

  

   输入“发件箱”按钮单击事件的程序代码:

   thisform.mailsess.signon

   thisform.mailmess.sessionid = thisform.mailsess.sessionid

   thisform.mailmess.msgindex = -1

   thisform.mailmess.recipdisplayname = "zjport@public.jsinfo.com.cn"

   thisform.mailmess.msgsubject = "信件"

   thisform.mailmess.msgnotetext = "请给我发邮件!"

   thisform.mailmess.send (.f.)

   thisform.mailsess.signoff

  

   输入“收件箱”按钮单击事件的程序代码:

   thisform.mailsess.signon

   thisform.mailmess.sessionid = thisform.mailsess.sessionid

   thisform.mailmess.fetchsorted = .t.

   thisform.mailmess.fetchunreadonly = .t.

   thisform.mailmess.action = 1

   xx=''

   for mm=0 to thisform.mailmess.msgcount-1

   thisform.mailmess.msgindex = mm

   xx=xx+thisform.mailmess.msgnotetext+chr(13)+chr(10)

   endf

   thisform.mailsess.signoff

  

   输入“退出”按钮的程序代码:

   thisform.mailsess.signoff

   release thisform

   上述程序只是给出用vb 5.0和vfp 5.0开发e-mail程序的简单案例,用户可以结合自己的实际情况,将上述程序修改、完善后,加入到自己的应用系统中去,使应用系统的功能更强大。

   以上程序在同创p/200、中文windows 95、windows nt 4.0、visual foxpro 5.0、visual basic 5.0软、硬件环境中运行并通过。

本文关键:VB
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top