程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 利用JMail組件快速構建郵件程序(下)

利用JMail組件快速構建郵件程序(下)

編輯:關於VC++

上文《利用JMail組件快速構建郵件程序(上)》中介紹了郵件的發送,本文將介紹郵件的接收過程,示例代碼運行效果圖如下:

三、郵件接收篇

3.1 利用IPOP3接收郵件

接收郵件時用到的接口是IPOP3, 首先連接上郵件服務器,從Messages中得到郵件信息集合,然後就可以通過遍歷集合取得每條Message中的具體內容。

請看如下代碼:

jmail::IPOP3Ptr pPOP3("JMail.POP3");
// 非必須,設置超時時間為60秒,默認為120秒
pPOP3->Timeout = 60;
// 連接郵件服務器
pPOP3->Connect("webmaster",    // 用戶帳號
    "password",    // 密碼
    "pop3.163.com",    // POP3服務器
    110);      // POP3端口
jmail::IMessagesPtr pMessages;
jmail::IMessagePtr pMessage;
pMessages = pPOP3->Messages;    // 取得集合
// 已下載的郵件的實際個數(因為第0個ITEM是未用的,所以-1)
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;
  _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();  // 這裡的Clear並不是清除郵件服務器上的郵件
pMessages.Release();
// 斷開連接
pPOP3->Disconnect();

3.2、實現類似Foxmail的遠程管理功能

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得到郵件頭對象,然後用IHeaders::GetText()得到全部頭部信息,或者用IHeaders::GetHeader()得到指定的頭部信息,例如:

jmail::IHeadersPtr pHeaders;
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代理收郵件,程序代碼不需要變動,只需將郵件服務器設置為代理服務器地址,帳號後面加上真實POP3主機的地址即可,例如:代理服務器地址192.16.10.1,需要收取[email protected]中的信, 則設置如下:

郵件服務器: 192.16.10.1

帳號: test#pop3.163.com

3.5、郵件的刪除

在上面我們曾經講到刪除單個郵件的方法:DeleteSingleMessage(long MessageID),如果想清空郵箱則只需要執行DeleteMessages(), 詳細請參考3.2中的代碼。

3.6、一點說明

IPOP3的DownloadMessages方法可以收取所有郵件中的所有數據,當我們通過Connect連接上服務器後,如果不執行DownloadMessages或者DownloadHeaders,則在執行pMessages->Item[i];時它會動態從服務器讀取當前該封郵件的全部數據。

四、關於程序的分發

在發行你的程序時不需安裝整個JMail,只需將jmail.dll注冊一下即可。

例如:regsvr32.exe c:\windows\system32\jmail.dll

(全文完)

  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved