張靜
(河南省氣象培訓中心,河南 鄭州450002)
在互聯(lián)網(wǎng)上,與電子郵件相關的2 個協(xié)議是POP3(郵局協(xié)議)和SMTP(簡單郵件傳輸協(xié)議)。其中,POP3 協(xié)議用于從POP3 服務器上接收郵件,而SMTP協(xié)議用于登錄SM T P 服務器來發(fā)送郵件[1-2]。C++Builder 提供了NMPOP3 控件和NMSMTP 控件來實現(xiàn)這2 個郵件收發(fā)協(xié)議。本文利用C++Builder 中的NMPOP3 控件,創(chuàng)建一個能接收電子郵件的系統(tǒng)。
NMPOP3 控件用于從POP3 協(xié)議服務器的主機中接收郵件,所有POP3 接收郵件的功能都封裝在該控件中,使用者只需修改該控件的屬性、訪問該控件的方法并對事件進行響應即可[3-4]。
NMPOP3 控件的主要屬性如表1 所示。
表1 NMPOP3 控件的屬性
NMPOP3 控件的主要方法如表2 所示。
表2 NMPOP3 控件的主要方法
表2 (續(xù))
在此步驟中,單擊“Connect/Account”選項卡上的“連接服務器”,如圖1 所示,將觸發(fā)CntBtn 事件。在此事件處理函數(shù)中,先設置NMPOP3 控件的各項屬性,然后與服務器建立連接,當連接成功后,設置此郵箱中的郵件數(shù)目。其源程序如下:
圖1 連接與斷開連接圖
void __fastcall TRveForm::CntBtn(TObject*Sender)
{
...
MyPOP31->Host=HoEdt->Text;
MyPOP31->Port=StrToInt(PtEdt->Text);
MyPOP31->UserID=UIEdt->Text;
MyPOP31->Password=PWEdt->Text;
MyPOP31->Connect();
}
當客戶成功連接到POP 服務器時,將觸發(fā)OnConnect 事件,其代碼如下:
MyStaBar1->SimpleText= “已經(jīng)連接到服務器”;
當客戶試圖連接到服務器而失敗時,將觸發(fā)OnConnectionFailed 事件,其代碼如下:
void__fastcallTRveForm::MyNMPOP31Connection Failed(TObject*Sender)
{
MyStaBar1->SimpleText = “連接服務器失敗”;
}
顯示郵件列表調(diào)用NMPOP3 控件的List()方法,其代碼如下:
void __fastcall TRveForm::ListBtnClick(TObject
*Sender)
{
MyNMPOP31->List();
}
其中,NMPOP3 控件的List()方法觸發(fā)OnList 事件,其代碼如下:
void __fastcall TFmMyMain::MyNMPOP3List(int Msg,int Size)
{
If(Msg<2)
{
MyMo1->Clear();
MyMo1->Lines->Add(“郵件序號/郵件大小(字節(jié))”);
}
MyMo1->Lines->Add(IntToStr(Msg)+ “ / ”+IntToStr(Size));
}
當郵件列表顯示以后,就可以輸入要讀取的郵件編號,單擊“Get Message”按鈕顯示郵件的詳細內(nèi)容,如圖2 所示。首先調(diào)用NMPOP3 控件的GetMailMessage()方法,并將Edt5 中的郵件編號取出來,得到的郵件信息被保存在MailMessage 屬性中。
圖2 顯示郵件圖
其源程序如下:
void __fastcall TFmMyMain::Btn3Click(TObject*Sender)
{
MyNMPOP31->GetMailMessage(StrToInt(Edt5->Text));
Edt7->Text=MyNMPOP31->MailMessage->Subjec;
Edt9->Text=MyNMPOP31->MailMessage->Mess ageId;
myMe1->Lines->Assign(MyNMPOP31->MailMe ssage->Head);
myMe2->Lines->Assign(MyNMPOP31->MailMe ssage->Body);
}
單擊“Get Summary”按鈕,調(diào)用NMPOP3 控件的GetSummary()方法,顯示郵件的概要信息,其代碼如下:
void __fastcall TFmMyMain::Btn6Click(TObject*Sender)
{
MyNMPOP31->GetSummary(StrToInt(Edt5->Te xt));
Edt6->Text=MyNMPOP31->Summary->From;
Edt7->Text=MyNMPOP31->Summary->Subject;
Edt8->Text=ntToStr(MyNMPOP31->Summary->Bytes);
Edt9->Text=MyNMPOP31->Summary->MessageId;
}
單擊“Delete”按鈕,調(diào)用NMPOP3 控件的DeleteMailMessage()方法,刪除郵件,其代碼如下:
void __fastcall TRveForm::Btn7Click(TObject*Sender)
{
MyNMPOP31->DeleteMailMessage(StrToInt(Edt 5->Text));
}
單擊“Disconnect”按鈕,調(diào)用NMPOP3 控件的Disconnect()方法,斷開與服務器的連接,其代碼如下:
void __fastcall TRveForm::Btn2Ck(TObject*Sender)
{
MyNMPOP31->Disconnect();
}
當客戶斷開與服務器的連接時,將觸發(fā)OnDisconnect 事件,其代碼如下:
void __fastcall TRveForm::MyNMPOP31Dct(TObject*Sender)
{
If(MyStatusBar1!=0)
MyStatusBar1->SimpleText= “脫機工作”;
}
本文基于C++Builder 開發(fā)平臺,討論了在應用程序中調(diào)用NMPOP3 控件接收電子郵件的方法,并設計了具體程序,其操作界面簡單,同時經(jīng)試驗檢測,具有很好的穩(wěn)定性。