NMPOP3 是 C++ Builder 內建的 ActiveX 封裝組件(來自 NetMasters/QuikSoft),封裝了 POP3 協議細節,提供連線、認證、列表、讀取、刪除、附件處理等高階介面,極大簡化郵件客戶端開發。
使用 TPageControl 三分頁:
Edit1(Server)、Edit2(Port=110)、Edit3(User)、Edit4(Password)、BtnConnect、BtnDisconnect、LabelCount。Edit5(Index)、Edit6(From)、Edit7(Subject)、Edit8(Size)、Edit9(Message-ID)、Memo1(Body)、Memo2(Headers)、BtnDelete/BtnView/BtnSummary。Memo3(List)、BtnList/BtnClearList。StatusBar 顯示狀態。核心組件:NMPOP31 放置於表單。
void __fastcall TForm1::BtnConnectClick(TObject *Sender) {
NMPOP31->AttachFilePath = "."; // 附件儲存目錄
NMPOP31->DeleteOnRead = false; // 讀取後不刪除
NMPOP31->ReportLevel = Status_Basic; // 事件回報層級
NMPOP31->TimeOut = 20000; // 20秒超時
NMPOP31->Host = Edit1->Text;
NMPOP31->Port = StrToInt(Edit2->Text);
NMPOP31->UserID = Edit3->Text;
NMPOP31->Password = Edit4->Text;
NMPOP31->Connect();
LabelCount->Caption = "# of Messages: " + IntToStr(NMPOP31->MailCount);
}
void __fastcall TForm1::BtnDisconnectClick(TObject *Sender) {
NMPOP31->Disconnect();
}
// 刪除指定索引郵件
void __fastcall TForm1::BtnDeleteClick(TObject *Sender) {
NMPOP31->DeleteMailMessage(StrToInt(Edit5->Text));
}
// 完整讀取郵件(含附件)
void __fastcall TForm1::BtnViewClick(TObject *Sender) {
int idx = StrToInt(Edit5->Text);
NMPOP31->GetMailMessage(idx);
Edit6->Text = NMPOP31->MailMessage->From;
Edit7->Text = NMPOP31->MailMessage->Subject;
Edit9->Text = NMPOP31->MailMessage->MessageId;
Memo2->Lines->Assign(NMPOP31->MailMessage->Head);
Memo1->Lines->Assign(NMPOP31->MailMessage->Body);
if (!NMPOP31->MailMessage->Attachments->Text.IsEmpty())
ShowMessage("Attachments:\n" + NMPOP31->MailMessage->Attachments->Text);
}
// 僅讀取摘要(不下載正文/附件,極快)
void __fastcall TForm1::BtnSummaryClick(TObject *Sender) {
int idx = StrToInt(Edit5->Text);
NMPOP31->GetSummary(idx);
Edit6->Text = NMPOP31->Summary->From;
Edit7->Text = NMPOP31->Summary->Subject;
Edit8->Text = IntToStr(NMPOP31->Summary->Bytes);
Edit9->Text = NMPOP31->Summary->MessageId;
}
// 列表所有郵件(編號+大小)
void __fastcall TForm1::BtnListClick(TObject *Sender) {
NMPOP31->List(); // 觸發 OnList 事件,結果在 Memo3 顯示
}
void __fastcall TForm1::BtnClearListClick(TObject *Sender) {
Memo3->Clear();
}
OnStatus、OnList、OnMessage 等事件實現非阻塞 UI,避免大郵件下載卡死主執行緒。AttachFilePath 需預先建立目錄;附件以原始檔名存儲,注意同名覆蓋與路徑遍歷安全。TIdMessageDecoder (Indy) 解碼。TIdPOP3 + TIdSSLIOHandlerSocketOpenSSL。NMPOP3 讓 POP3 客戶端開發變得「拖拉拽 + 寫幾行代碼」即可完成,適合快速原型、內網工具、教學演示。面向生產環境時,請考慮升級至 Indy 或 OpenSSL 支援的現代庫。