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 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章