就是如何验证用户名和密码? // 验证用户名
sAuth = "bXl1c2VybmFtZQ\r\n";   User: myusername
m_wsSMTPServer.Send( (LPCTSTR)sAuth, sAuth.GetLength() );
if( !get_response(USERNAME_SUCCESS,false) )
{
AfxMessageBox("USERNAME FAILURE");
m_wsSMTPServer.Close();
return FALSE;
}

// 验证密码       Password:password
sAuth = "cGFzc3dvcmQ\r\n";
m_wsSMTPServer.Send( (LPCTSTR)sAuth, sAuth.GetLength() );
if( !get_response(PASSWORD_SUCCESS,false) )
{
CString sResponse = response_buf;
if(sResponse.Find("user")>0)
   AfxMessageBox("User not exitst");
else if(sResponse.Find("Password"))
AfxMessageBox("Password incorrect");
m_wsSMTPServer.Close();
return FALSE;
}为什么我这里的用户名和密码都是正确的,但是服务器返回的时候却说我的密码错误?

解决方案 »

  1.   

    说明:用户名和密码都是经过base64编码的。
      

  2.   

    CSocket theSender;
    theSender.Create();
    char theBuf[1024]; CString theTemp;
    CBase64 theCoder; CString theStr;


    if (!(theSender.Connect(theDlg.theSmtp,25)))
    {MessageBox("connect to server failed!"); return;}


    int nResult=theSender.Receive(theBuf,1024);theBuf[nResult]='\0';
    theStr=theBuf;
    if (theStr.Left(3)!="220") 
    {MessageBox("server busy!"); theSender.Close();return;}
        strcpy(theBuf,"HELO ");
    gethostname(theBuf+5,1019); strcat(theBuf,"\r\n");
    theSender.Send(theBuf,strlen(theBuf));
    nResult=theSender.Receive(theBuf,1024); theBuf[nResult]='\0';
    theStr=theBuf;
    if (theStr.Left(3)!="250") 
    {MessageBox("server no response!"); theSender.Close();return;} theSender.Send("AUTH LOGIN\r\n",strlen("AUTH LOGIN\r\n"));
    nResult=theSender.Receive(theBuf,1024); theBuf[nResult]='\0';
    theStr=theBuf; if (theStr.Left(3)=="334") 
    {    theTemp=theCoder.Encode("UserName",strlen("UserName"));
    theTemp+="\r\n"; 
    theSender.Send((LPCTSTR)theTemp,theTemp.GetLength());
    nResult=theSender.Receive(theBuf,1024); theBuf[nResult]='\0';
    theTemp=theCoder.Encode('Password",strlen("Password"));
    theTemp+="\r\n";  
    theSender.Send((LPCTSTR)theTemp,theTemp.GetLength());
    nResult=theSender.Receive(theBuf,1024); theBuf[nResult]='\0';
    theStr=theBuf;

    if (theStr.Left(3)!="235")
    {MessageBox("login failed!");theSender.Close();return;} }
      

  3.   

    少了半个大括号if (theStr.Left(3)=="334") 
    {    theTemp=theCoder.Encode("UserName",strlen("UserName"));
    theTemp+="\r\n"; 
    theSender.Send((LPCTSTR)theTemp,theTemp.GetLength());
    nResult=theSender.Receive(theBuf,1024); theBuf[nResult]='\0';
    theTemp=theCoder.Encode('Password",strlen("Password"));
    theTemp+="\r\n";  
    theSender.Send((LPCTSTR)theTemp,theTemp.GetLength());
    nResult=theSender.Receive(theBuf,1024); theBuf[nResult]='\0';
    theStr=theBuf;

    if (theStr.Left(3)!="235")
    {MessageBox("login failed!");theSender.Close();return;} }}
      

  4.   

    mingbao(★情已逝★)------------------------
    我发送邮件怎么知道邮件服务器的IP地址或者域名啊?例如:我在搜狐上有一个邮件帐号,但是我怎么知道搜狐的邮件服务器的IP地址呢?尽管我知道我的邮箱的用户名和密码,但是如果不知道搜狐的SMTP邮件服务器的IP
    地址,我无法连接SMTP 邮件服务器,也就发不了邮件啊?
      

  5.   

    B2China(海陆空天电磁) 
    DNS解析。(MX 服务器)
      

  6.   

    我用的是ESMTP 协议, 
    但是令我困惑的是如何知道一个网站的ESMTP 服务器的IP地址?
    也就是它的邮件服务器的地址呢?
      

  7.   

    // 验证密码     密码为:password,对应的base64编码是:cGFzc3dvcmQ
             //  为什么这个密码是正确的但是
             //  服务器返回时却说我的密码是错误的?
    CString sAuth = "cGFzc3dvcmQ\r\n";
    m_wsSMTPServer.Send( (LPCTSTR)sAuth, sAuth.GetLength() );
    if( !get_response(PASSWORD_SUCCESS,false) )
    {
    CString sResponse = response_buf;
    if(sResponse.Find("user")>0)
       AfxMessageBox("User not exitst");
    else if(sResponse.Find("Password"))
    AfxMessageBox("Password incorrect");
    m_wsSMTPServer.Close();
    return FALSE;
    }