承接上篇《利用 JMail 組件快速構建郵件程式(上)》的郵件發送內容,本文將詳細介紹 JMail 4.3 在 VC++ 中實作郵件接收(POP3)、遠端郵件管理、郵件標頭解析、代理伺服器支援等進階功能。範例程式執行效果如圖所示。

接收郵件核心介面為 IPOP3。流程:連線郵件伺服器 → 取得 Messages 集合 → 遍歷每封郵件提取主旨、寄件者、內文等資訊。
jmail::IPOP3Ptr pPOP3("JMail.POP3");
pPOP3->Timeout = 60; // 設定逾時 60 秒
pPOP3->Connect("webmaster", "password", "pop3.163.com", 110);
jmail::IMessagesPtr pMessages = pPOP3->Messages;
long lCount = pMessages->Count - 1; // 第 0 項未使用
for (long i = 1; i <= lCount; i++) {
jmail::IMessagePtr pMessage = pMessages->Item[i];
_bstr_t bstrSubject = pMessage->Subject;
_bstr_t bstrFrom = pMessage->From;
_bstr_t bstrBody = pMessage->Body;
printf("(%d)Subject:%s, From:%s, Body:%s\r\n", i, (const char*)bstrSubject, (const char*)bstrFrom, (const char*)bstrBody);
pMessage.Release();
}
pMessages->Clear(); // 僅清除本地快取,不刪除伺服器郵件
pMessages.Release();
pPOP3->Disconnect();
面對垃圾郵件氾濫,僅下載郵件標頭即可判斷是否接收。JMail 提供 DownloadHeaders 方法:
pPOP3->Connect("webmaster", "password", "pop3.163.com", 110);
pPOP3->DownloadHeaders(); // 僅下載標頭
pMessages = pPOP3->Messages;
long lCount = pMessages->Count - 1;
for (long i = 1; i <= lCount; i++) {
pMessage = pMessages->Item[i];
_bstr_t bstrSubject = pMessage->Subject;
_bstr_t bstrFrom = pMessage->From;
// 中文主旨可能經編碼,此處僅示範刪除功能
if (strstr((const char*)bstrSubject, "成人") != NULL)
pPOP3->DeleteSingleMessage(i); // 刪除垃圾郵件
else
printf("(%d)Subject:%s, From:%s\r\n", i, (const char*)bstrSubject, (const char*)bstrFrom);
pMessage.Release();
}
透過 IMessage::Headers 取得標頭物件,可讀取完整標頭或特定欄位:
jmail::IHeadersPtr pHeaders = pMessage->Headers;
_bstr_t bstrHeaderText = pHeaders->GetText(); // 完整標頭
printf("%s\r\n", (const char*)bstrHeaderText);
_bstr_t bstrContentType = pHeaders->GetHeader("Content-Type"); // 特定欄位
printf("%s\r\n", (const char*)bstrContentType);
pHeaders.Release();
程式碼無需修改,僅需調整連線參數:郵件伺服器設為代理位址,帳號格式為 帳號#真實POP3主機。例如代理 192.16.10.1,收取 test@163.com:
192.16.10.1test#pop3.163.comDeleteSingleMessage(long MessageID)DeleteMessages()IPOP3::DownloadMessages 可一次性下載所有郵件資料。若連線後未呼叫 DownloadMessages 或 DownloadHeaders,存取 pMessages->Item[i] 時會動態從伺服器讀取該封郵件完整資料。
發布程式時無需安裝完整 JMail,僅需註冊 jmail.dll 即可:
regsvr32.exe c:\windows\system32\jmail.dll