C++ 建立郵件客戶端之收郵件(利用POP3)(二)

//發送命令,以此類推...

void SocketRM::GetUIDL()
{
	send(ServMail,"uidl\r\n",strlen("uidl\r\n"),0);
	recv(ServMail,(LPSTR)recvbuf,sizeof(recvbuf),0);
	//std::cout<<"Serve:"<<recvbuf;
	memset(recvbuf,0,20000);
	//std::cout<<"Serve:"<<std::endl;
};
//得到郵件頭信息
void SocketRM::GetEmailInfo()
{
	//查看"某"個郵件的前1行
	std::cout<<"Which Email do you want?";
	std::string Choice;
	std::cin>>Choice;
	Order="top "+Choice+" 1\r\n";
	send(ServMail,Order.c_str(),strlen(Order.c_str()),0);
	
	recv(ServMail,(LPSTR)recvbuf,sizeof(recvbuf),0);
	//std::cout<<"Serve:"<<recvbuf;
	memset(recvbuf,0,20000);
	//std::cout<<"Serve:"<<std::endl;
	while(true)
	{
		//之所以要收取兩次SOCKET的緩存區,是POP3中的retr命令
		//該命令會先從服務器中下載一個郵件信息——大小
		//然後會在下載郵件原文,所以要從服務器上下載兩次,也就是要兩次存入SOCKET緩存區
		//那麼就需要recv()函數進行2次COPY.
		int val=recv(ServMail,(LPSTR)recvbuf,sizeof(recvbuf),0);
		std::cout<<recvbuf;
		bufStr+=recvbuf;
		memset(recvbuf,0,20000);
		//對於從服務器收到的郵件原文的數據:
		//對於最後的結尾,有:
		//recvbuf[val]=='\0',recvbuf[val-1]=='\n',recvbuf[val-2]=='\r',標誌符
		if(recvbuf[val]=='\0')
			break;

	}
	bufStr=bufStr.c_str();
	
};

//End...

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