为什么用POP3协议写邮件收发时一到PASS传送密码时就不成功啊?
- C/C++ code
//建立连接BOOL CPop::Connect(){ char sUser[512]; char sPass[512]; memset(sUser, 0, 512); memset(sPass, 0, 512); if (m_bConnected) { return TRUE; } if (!m_wsPOP3Server.Create()) { m_sError = _T("Unable to create the socket."); return FALSE; } if (!m_wsPOP3Server.Connect(GetServerHostName(),GetPort())) { m_sError = _T("Unable to connect the Server"); m_wsPOP3Server.Close(); return FALSE; } if (!get_response(CONNECTION)) { m_wsPOP3Server.Close(); return FALSE; } //sUser.Format("USER%s\r\n",GetUserName()); wsprintf (sUser, "USER %s\r\n", (LPCSTR)GetUserName()); m_wsPOP3Server.Send((LPCSTR)sUser, sizeof(sUser)); if (!get_response(IDENTIFICATION)) { m_wsPOP3Server.Close(); return FALSE; } //sPass.Format("PASS%s\r\n",GetPassWord()); wsprintf (sPass, "PASS %s\r\n", (LPCSTR)GetPassWord()); m_wsPOP3Server.Send((LPCSTR)sPass, sizeof(sPass));//这个之后Receive为空 if (!get_response(AUTHENTIFICATION)) { m_wsPOP3Server.Close(); return FALSE; } m_bConnected = TRUE; return TRUE;}//获取相应BOOL CPop::get_response(UINT executed_action){ char buf[512]; memset(buf, 0, 512); //int nChars = m_wsPOP3Server.Receive(response_buf, RESPONSE_BUFFER_SIZE); int nChars = m_wsPOP3Server.Receive(buf, RESPONSE_BUFFER_SIZE); if (SOCKET_ERROR == nChars) { m_sError = _T("Socket Error"); return FALSE; } //m_sResponse = response_buf; m_sResponse = buf; m_sResponse = m_sResponse.Left(nChars); if (m_sResponse.Left(4) == "-ERR") { m_sError.Format("%s" ,error_table[executed_action]); return FALSE; } return TRUE;}[解决办法]
和邮件服务器进行交互应答时,只用ASCII码,不要使用UNICODE
只用数据类型 char
[解决办法]
你还没弄好啊,抱歉上次忘了发了,刚给你发过去了。