用PB编写邮件应用程序
2024-07-21 02:10:21
供稿:网友
 
 
  由于受到强大数据库功能的掩盖,pb的邮件功能鲜为人知。在vb中可以轻松地利用cdo控件发邮件(delphi中用nmsmtp),而pb中的邮件函数比它们更灵活、方便。 
  pb以其独特高效的数据库访问技术,赢得了广大程序员的青睐。从表面上看,它似乎只适合于开发数据库应用程序,而事实上,pb遵照信报接口mapi的标准,开发了许多内部函数和数据结构,用于对电子邮件提供支持,因此也是一个相当不错的邮件应用程序开发工具。 
  一个邮件应用程序要处理的基本事务主要包括:登录到邮件服务器开始会话、接发邮件、结束邮件会话。在pb中,所有这些事务都围绕mailsession对象来展开,因此,编程时,需要在主窗口中定义一个该类型的实例变量: 
  mailsession mymail 
  然后在open事件中将其初始化: 
  mymail=create mailsession 
  1.登录到邮件服务器 
  mymail经过初始化以后,还要用maillogon命令将其连接到一个邮件服务器: 
  mymail.maillogon(′jq75′,′alexander′,mailnewsessionwithdownload!) 
  前两个参数分别为用户名和口令,若被忽略,运行时就会出现一个注册对话框。最后一个参数表示新建一个邮件会话,并将服务器上属于jq75的邮件下载到他的收件箱中。 
图1 
  2.阅读邮件 
  用户信息在服务器上通过验证以后,一个有效的邮件会话就建立了,接下来要做的工作就是接发邮件。 
  pb用一个mailmessage对象来描述一封邮件,该对象封装了邮件的主题、地址、消息体和附件等信息。图1是邮件应用程序的阅读界面,它列出了收件箱中的所有邮件,可选择其中一封进行阅读。主窗口open事件的代码为: 
  …… //连接到邮件服务器 
  mymail.mailgetmessages() 
  //用收件箱中的邮件填充mymail对象 
  inum=upperbound(mymail.messageid[]) 
  //获取收件箱中的邮件数目 
  for i=1 to inum //读取收件箱中的每一封邮件,并将其主题添加到列表框中 
  mymail.mailreadmessage(mymail.messageid[i],msg, mailentiremessage!,true) 
  tab—1.tabpage—1.plb—1.additem(msg.subject,1) 
  next //msg为mailmessage类型的实例变量 
  在plb—1控件的selectionchanged事件中加入下列代码: 
  mymail.mailreadmessage(mymail.messageid[index],msg, mailentiremessage!,true) 
  sle—1.text=msg.subject 
  //显示当前邮件的主题 
  sle—2.text=msg. recipient[1].address 
  //显示发件人地址 
  sle—3.text=msg.datereceived 
  //显示收件时间 
  mle—1.text=msg.notetext 
  //显示邮件的消息体 
  iattachmentfilenum=upperbound(msg.attachmentfile[]) 
  //获取当前邮件的附件数目 
  for i=1 to iattachmentfilenum 
  strattfile= strattfile +msg.attachmentfile[i].pathname+″~r~n″ 
  next //strattfile为string类型的实例变量 
  在“附件”按钮的clicked事件中加入下列代码: 
  messagebox(″邮件附件″, strattfile) //显示当前邮件的附件及其在硬盘上存放的位置 
  3.发送邮件 
  图2是邮件应用程序的发送界面,它接收收件人地址、邮件主题、消息体和附件,用于填充一个mailmessage类型的对象msg,然后发送。“添加附件”按钮用于选择磁盘文件,其clicked事件代码为: 
图2 
  string docname, named 
  integer value 
  value = getfileopenname(″选择附件″, docname, named, ″doc″, ″all files (*.*),*.*″) 
  if value = 1 then 
  plb—2.additem(docname,1) 
  //docname中必须包含完整的路径信息 
  “删除附件”按钮用于把已添加的文件去掉,其clicked事件代码为: 
  ind= plb—2.selectedindex() 
  if ind〈〉-1 then plb—2. deleteitem(ind) 
  “发送”按钮的clicked事件代码为: 
  msg.subject=sle_4.text //邮件主题 
  msg.notetext=mle—2.text //消息体 
  msg.recipient[1].recipienttype=mailto! 
  //指定收件人类型为mailto! 
  msg.recipient[1].address=′smtp:′+sle—5.text 
  //收件人地址,前面必须加上smtp协议 
  for i=1 to plb—2.totalitems() 
  //把选中的文件加到附件中 
  msg.attachmentfile[i].filetype=mailattach! //指定附件i的类型 
  msg.attachmentfile[i].pathname= plb—2.text(i) //附件i的完整文件名 
  next 
  mymail.mailsend(msg) //发送邮件 
  4.结束邮件会话 
  在“退出”按钮的clicked事件中加入下列代码: 
  mymail.maillogoff() //结束邮件会话 
  destroy mymail //销毁会话对象 
  至此,一个简单的邮件应用程序就编好了,它虽然还不足以和foxmail、outlook相媲美,但已经具备了它们最基本的功能。 
  例子中的程序在pb6.5中调试通过,大部分代码可以直接利用