首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

利用 JMail 組件快速構建郵件程式(下):POP3 接收與遠端管理實作

     編輯:關於VC++

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

郵件接收程式執行效果

3.1 使用 IPOP3 介面接收郵件

接收郵件核心介面為 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();

3.2 實作類似 Foxmail 的遠端郵件管理

面對垃圾郵件氾濫,僅下載郵件標頭即可判斷是否接收。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();
}

3.3 郵件標頭詳細資訊讀取

透過 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();

3.4 透過代理伺服器接收郵件

程式碼無需修改,僅需調整連線參數:郵件伺服器設為代理位址,帳號格式為 帳號#真實POP3主機。例如代理 192.16.10.1,收取 test@163.com:

  • 郵件伺服器:192.16.10.1
  • 帳號:test#pop3.163.com

3.5 郵件刪除操作

  • 刪除單封:DeleteSingleMessage(long MessageID)
  • 清空信箱:DeleteMessages()

3.6 重要補充說明

IPOP3::DownloadMessages 可一次性下載所有郵件資料。若連線後未呼叫 DownloadMessages 或 DownloadHeaders,存取 pMessages->Item[i] 時會動態從伺服器讀取該封郵件完整資料。

四、程式部署與散發

發布程式時無需安裝完整 JMail,僅需註冊 jmail.dll 即可:

regsvr32.exe c:\windows\system32\jmail.dll
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved