3,881
社区成员
发帖
与我相关
我的任务
分享
int SendMail::RcvServMsg(void)
{
char buf[BUFSIZE] = {0};
if(::recv(this->iSocket,buf,sizeof(buf),0) == -1)
{//接受服务器的回馈数据失败
::closesocket(this->iSocket);
this->bConn = false;
return SM_RCV_INFO_FAILD;
}
this->sRcvReturnMsg.assign(buf);
::memcpy(this->cCode,buf,3);
this->cCode[3] = 0;
return 0;
}
// 发送指定的命令
// 成功 SM_OK
// 发送命令失败 SM_CMD_FAILD
// 发件名为空 SM_FROM_EMPTY
// 接受服务器回馈信息失败 SM_RCV_INFO_FAILD
int SendMail::SendCmdServ(int cmd)
{
int res = -1;
char buf[BUFSIZE] = {0};
assert(cmd > SMcmd::first);
assert(cmd < SMcmd::end);
if(this->sFromAddr.empty())
return SM_FROM_EMPTY;
if(cmd == SMcmd::ehlo)
{///招呼
::memset(buf,0,BUFSIZE);
strcpy(buf,"EHLO ");
::memcpy(buf+::strlen(buf),this->sFromAddr.c_str(),this->sFromAddr.length());
}else if(cmd == SMcmd::auth)
{//身份认证
::strcpy(buf,"AUTH LOGIN");
}else if(cmd == SMcmd::account)
{///发送自己的登录账户
//Base64 base;
::strcpy(buf,Base64::base64_encode(this->sFromAddr).c_str());
}else if(cmd == SMcmd::passw)
{///发送登陆密码
::strcpy(buf,Base64::base64_encode(this->sPassw).c_str());
}
if((res = send(this->iSocket , buf , strlen(buf)+1 ,0)) == -1)
{///发送命令失败
return SM_CMD_FAILD;
}
///开始获得返回的数据
if(this->RcvServMsg() < 0)
{/////接受数据失败
return SM_RCV_INFO_FAILD;
}
return SM_OK;
}