说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

请问SMTP 协议如何进行身份验证?

编辑:说三道四文库 发布时间:2018-06-24 07:31
HTML文档下载 WORD文档下载 PDF文档下载
就是如何验证用户名和密码?

// 验证用户名
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;
}

为什么我这里的用户名和密码都是正确的,但是服务器返回的时候却说我的密码错误?
说明:用户名和密码都是经过base64编码的。
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;}

}
少了半个大括号

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;}

}

}

mingbao(★情已逝★)

------------------------
我发送邮件怎么知道邮件服务器的IP地址或者域名啊?

例如:我在搜狐上有一个邮件帐号,但是我怎么知道搜狐的邮件服务器的IP地址呢?

尽管我知道我的邮箱的用户名和密码,但是如果不知道搜狐的SMTP邮件服务器的IP
地址,我无法连接SMTP 邮件服务器,也就发不了邮件啊?
B2China(海陆空天电磁) 
DNS解析。(MX 服务器)
smtp不需要,esmtp需要
我用的是ESMTP 协议, 
但是令我困惑的是如何知道一个网站的ESMTP 服务器的IP地址?
也就是它的邮件服务器的地址呢?
// 验证密码     密码为: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;
}
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘