在PowerBuilder中实现电子邮件自动寻呼

Author: 岳兵 Date: 2000年 第7期

  PowerBuilder不仅在开发数据库应用方面具有强大的优势,而且它为用户提供的DDE、OLE、MAPI等接口也给编程人员一个友好的开发界面。PowerBuilder基于COM编程的思想使开发者不必关心电子邮件的底层协议的实现就可以很轻松地编写出一些有关电子邮件的应用软件。本文介绍的电子邮件自动寻呼就是在PowerBuilder中通过调用MS_Mail系统和Windows SDK函数实现的。
  本程序是利用TIMER事件,每隔一定时间,检测一次用户的电子信箱,如果发现新邮件,就通过MODEM拨打用户的呼机号码来通知用户,从而实现电子邮件自动寻呼的目的。PowerBuilder没有内置相关函数来支持拨号功能,但可以调用Windows底层通信函数来实现。具体方法如下:
  首先在PowerBuilder中打开应用窗口,创建一个新应用及mailcall.pbl,在应用的open事件下输入脚本
    open(w_main)
    创建一个窗口w_main,在窗口上放置如下控件(见^07020401a^及^07020401b^表):
  在全局变量声明窗口中输入如下语句:
  mailMessage msg
  mailSession msession
  mailReturnCode mrtncode
  在外部函数声明窗口中输入如下语句:
  FUNCTION int OpenComm(string comm,uint inqueue,uint OutQueue)&
  Library ″user.exe″
  FUNCTION int CloseComm(int pFile) Library ″user.exe″
  FUNCTION int FlushComm(int pFile,int size) Library  ″user.exe″
  FUNCTION int WriteComm(int pFile,string buffer,int size) Library ″user.exe″
  在窗口w_main的open、timer和close事件中输入以下脚本:
  1.open事件
  sle_1.text=″″
  sle_2.text=″″
  2.timer事件
  int mCount,pFile
  string mbLocation,mContext,timestr,commstr
  mrtncode=msession.mailGetMessages(TRUE)//得到接收到的新邮件的ID
  if mrtncode<>mailReturnSuccess! then Return //如果无新邮件,等待下次检索
  timestr=string(Month(Today()),″00″)+string(Day(Today()),″00″)+&
  string(Hour(Now()),″00″)+string(Minute(Now()),″00″)
  mblocation=″c:\mail\m″+timestr+″.txt″ //新邮件存放的位置
  mcount=Upperbound(msession.MessageID[])//取最后一封新邮件
  msession.mailReadMessage(msession.MessageID[mount],msg,mailEntireMessage!,TRUE)
  mcontext=msg.NoteText
  pFile=FileOpen(mbLocation,Streammode!,Write!,LockReadWrite!,Replace!)
  FileWrite(pFile,mContext)//保存新邮件
  FileClose(pFile)
  commstr=″atdt″+sle_3.text+″~r~n″ //要拨打的call机号码
  pFile=OpenComm(″com2″,128,128)//打开com2口
  FlushComm(pFile,0)
  FlushComm(pFile,1)
  WriteComm(pFile,commstr,len(commstr))//开始拨打用户的call机
  WriteComm(pFile,″~r~n″,2)
  CloseComm(pFile)
  3.CLOSE事件
  msession.mailLogoff()//退出邮件系统
  Destroy msession//释放邮件对象占用的内存
  4.在cb_2的clicked事件中输入以下代码:
  mailLogonOption mlogopt
  msession=create mailsession//实例化对象变量msession
  mlogopt=mailNewSession!
  if sle_1.text=″″ or sle_2.text=″″ or sle_3.text=″″ then
  MessageBox(″错误″,″请输入用户名和口令!″)
  else
  //以用户输入的用户名和口令开始一个邮件会话
  mrtncode=msession.mailLogon(sle_1.text,sle_2.text,mlogopt)
  if mrtncode<>mailReturnSuccess! then
  messagebox(″错误″,″信箱登录失败!″)
  Return
  end if
  timer(300) //若登录成功,每5分钟检索一次邮箱
  end if
  5.在cb_1的clicked事件中输入以下代码:
  halt//终止程序
  注意:要达到电子邮件的自动寻呼的目的,还必须配置好MS_Mail系统。正确配置好用户的个人信息和邮箱信息(POP3和SMTP)。