用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中調試通過,大部分代碼可以直接利用。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章