在PowerBuilder中实现电子邮件自动寻呼
本程序是利用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)。