◎◎◎◎◎◎◎ 关于POP3协议 ◎◎◎◎◎◎◎◎◎ 你pass指令格式是否正确,有无\r\n? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 enum eResponse { CONNECT = 0, USER, PASS, STAT, UIDL, LIST, RETR, DELE, RSET, TOP, NOOP, QUIT };bool CPOP3::_SendMsg(int eRespense,int nNumb){ CString sSendText; sSendText = _AssembleMsg(eRespense,nNumb); //组合发送的信息包 memset( m_pcSendBuf, '\0', SEND_BUFFER_SIZE ); memcpy( m_pcSendBuf, sSendText, sSendText.GetLength() ); m_wsPOP3.Send( m_pcSendBuf, SEND_BUFFER_SIZE ); //发送信息报 if ( !_Check(eRespense) ) //验证该指令是否成功 { return false; } return true;}/* 根据eResponse,对从服务器收到的包进行分析,判断所做操作是否正确返回 */bool CPOP3::_Check(int eResponse){ memset( m_pcRecvBuf, '\0', RECV_BUFFER_SIZE ); m_wsPOP3.Receive( m_pcRecvBuf, RECV_BUFFER_SIZE );//收取主机发来得包 if( m_pcRecvBuf[0] == '\0' ) { m_sError = _T("收取信息包为空!"); return false; } char cTemp[5]; memset( cTemp, '\0', sizeof(cTemp) ); memcpy( cTemp, m_pcRecvBuf, 4 ); //截取前四位 if ( strcmp(cTemp, "-ERR") == 0 ) //如果错误则返回false及错误信息 { m_sError = _T( m_pcRecvBuf ); m_sError = m_sError.Right( m_sError.GetLength()-4 ); //获取错误信息 return false; } /* 在Pop3通讯正确情况下所走分支 */ switch( eResponse ) { case CONNECT: break; case USER: break; case PASS: break; case STAT: m_wsPOP3.Receive( m_pcRecvBuf, RECV_BUFFER_SIZE );//再次接收主机发来得包 break; case UIDL: m_wsPOP3.Receive( m_pcRecvBuf, RECV_BUFFER_SIZE );//再次接收主机发来得包 break; case LIST: m_wsPOP3.Receive( m_pcRecvBuf, RECV_BUFFER_SIZE );//再次接收主机发来得包 break; case RETR:// memset( m_pcRecvBuf, '\0', RECV_BUFFER_SIZE ); m_wsPOP3.Receive( m_pcRecvBuf, RECV_BUFFER_SIZE );//再次接收主机发来得包 break; case DELE: break; case RSET: break; case TOP: break; case NOOP: break; case QUIT: break; default: break; } return true;}/* 根据nCommd来组合要发送的报文 */CString CPOP3::_AssembleMsg( int nCommd, int nNumb){ CString sSendText = _T(""); //每个pop3指令均用空格补足五位 switch( nCommd ) { case CONNECT: break; case USER: sSendText = _T("USER ") + GetUser(); break; case PASS: sSendText = _T("PASS ") + GetPassword(); break; case STAT: sSendText = _T("STAT "); break; case UIDL: sSendText.Format( _T("UIDL %d"), nNumb ); if ( nNumb == 0 ) //说明pop3指令不带参数 sSendText = sSendText.Left( 5 ); //取前五位,将数字去掉。使其不带参! break; case LIST: sSendText.Format( _T("LIST %d"), nNumb ); if ( nNumb == 0 ) //说明pop3指令不带参数 sSendText = sSendText.Left( 5 ); //取前五位,将数字去掉。使其不带参! break; case RETR: sSendText.Format( _T("RETR %d"), nNumb ); if ( nNumb == 0 ) //说明pop3指令不带参数 sSendText = sSendText.Left( 5 ); //取前五位,将数字去掉。使其不带参! break; case DELE: sSendText.Format( _T("DELE %d"), nNumb ); if ( nNumb == 0 ) //说明pop3指令不带参数 sSendText = sSendText.Left( 5 ); //取前五位,将数字去掉。使其不带参! break; case RSET: sSendText = _T("RSET "); break; case TOP: sSendText.Format( _T("TOP %d"), nNumb ); if ( nNumb == 0 ) //说明pop3指令不带参数 sSendText = sSendText.Left( 5 ); //取前五位,将数字去掉。使其不带参! break; case NOOP: sSendText = _T("NOOP "); break; case QUIT: sSendText = _T("QUIT "); break; default: break; }//End of switch sSendText += _T("\r\n"); //增加<CRLF> return sSendText;}.....if( _SendMsg(USER) ){ ....}if ( _SendMsg(PASS) ){ ....} window 如何按command 把edit的内容写到文件里 散分 Lactoferrin 进来拿分, 求一个局域网文本聊天程序 请问如何在VCKBASE的在线杂志中搜索文章? 对一个按钮添加成员变量后,程序为什么总是自动跳出???急急急!!! 服务器方怎样判断socket断开? 串行化的主要好处是什么?我若是不做串行化程序不是一样运行吗? Visual C++ 技术内幕(第六版)这本书怎么样?适合什么水平的人看啊? release版和debug版有什么区别? 我在自建的类中怎么不能用GetDlgItemInt()? 机会就在您的鼠标上 一个关于文件读取的问题
{
CONNECT = 0,
USER,
PASS,
STAT,
UIDL,
LIST,
RETR,
DELE,
RSET,
TOP,
NOOP,
QUIT
};bool CPOP3::_SendMsg(int eRespense,int nNumb)
{
CString sSendText;
sSendText = _AssembleMsg(eRespense,nNumb); //组合发送的信息包
memset( m_pcSendBuf, '\0', SEND_BUFFER_SIZE );
memcpy( m_pcSendBuf, sSendText, sSendText.GetLength() );
m_wsPOP3.Send( m_pcSendBuf, SEND_BUFFER_SIZE ); //发送信息报 if ( !_Check(eRespense) ) //验证该指令是否成功
{
return false;
}
return true;
}/* 根据eResponse,对从服务器收到的包进行分析,判断所做操作是否正确返回 */
bool CPOP3::_Check(int eResponse)
{
memset( m_pcRecvBuf, '\0', RECV_BUFFER_SIZE );
m_wsPOP3.Receive( m_pcRecvBuf, RECV_BUFFER_SIZE );//收取主机发来得包
if( m_pcRecvBuf[0] == '\0' )
{
m_sError = _T("收取信息包为空!");
return false;
} char cTemp[5];
memset( cTemp, '\0', sizeof(cTemp) );
memcpy( cTemp, m_pcRecvBuf, 4 ); //截取前四位 if ( strcmp(cTemp, "-ERR") == 0 ) //如果错误则返回false及错误信息
{
m_sError = _T( m_pcRecvBuf );
m_sError = m_sError.Right( m_sError.GetLength()-4 ); //获取错误信息
return false;
} /* 在Pop3通讯正确情况下所走分支 */
switch( eResponse )
{
case CONNECT:
break; case USER:
break; case PASS:
break; case STAT:
m_wsPOP3.Receive( m_pcRecvBuf, RECV_BUFFER_SIZE );//再次接收主机发来得包
break; case UIDL:
m_wsPOP3.Receive( m_pcRecvBuf, RECV_BUFFER_SIZE );//再次接收主机发来得包
break; case LIST:
m_wsPOP3.Receive( m_pcRecvBuf, RECV_BUFFER_SIZE );//再次接收主机发来得包
break; case RETR:
// memset( m_pcRecvBuf, '\0', RECV_BUFFER_SIZE );
m_wsPOP3.Receive( m_pcRecvBuf, RECV_BUFFER_SIZE );//再次接收主机发来得包
break; case DELE:
break; case RSET:
break; case TOP:
break; case NOOP:
break; case QUIT:
break; default:
break;
} return true;
}/* 根据nCommd来组合要发送的报文 */
CString CPOP3::_AssembleMsg( int nCommd, int nNumb)
{
CString sSendText = _T("");
//每个pop3指令均用空格补足五位
switch( nCommd )
{
case CONNECT:
break; case USER:
sSendText = _T("USER ") + GetUser();
break; case PASS:
sSendText = _T("PASS ") + GetPassword();
break; case STAT:
sSendText = _T("STAT ");
break; case UIDL:
sSendText.Format( _T("UIDL %d"), nNumb );
if ( nNumb == 0 ) //说明pop3指令不带参数
sSendText = sSendText.Left( 5 ); //取前五位,将数字去掉。使其不带参!
break; case LIST:
sSendText.Format( _T("LIST %d"), nNumb );
if ( nNumb == 0 ) //说明pop3指令不带参数
sSendText = sSendText.Left( 5 ); //取前五位,将数字去掉。使其不带参!
break; case RETR:
sSendText.Format( _T("RETR %d"), nNumb );
if ( nNumb == 0 ) //说明pop3指令不带参数
sSendText = sSendText.Left( 5 ); //取前五位,将数字去掉。使其不带参!
break; case DELE:
sSendText.Format( _T("DELE %d"), nNumb );
if ( nNumb == 0 ) //说明pop3指令不带参数
sSendText = sSendText.Left( 5 ); //取前五位,将数字去掉。使其不带参!
break; case RSET:
sSendText = _T("RSET ");
break; case TOP:
sSendText.Format( _T("TOP %d"), nNumb );
if ( nNumb == 0 ) //说明pop3指令不带参数
sSendText = sSendText.Left( 5 ); //取前五位,将数字去掉。使其不带参!
break; case NOOP:
sSendText = _T("NOOP ");
break; case QUIT:
sSendText = _T("QUIT ");
break; default:
break;
}//End of switch
sSendText += _T("\r\n"); //增加<CRLF>
return sSendText;
}
.....
if( _SendMsg(USER) )
{
....
}
if ( _SendMsg(PASS) )
{
....
}