用PB收发邮件


由于受到强大数据库功能的掩盖,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中调试通过,大部分代码可以直接利用。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章