三、郵件接收篇
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