用SOCKET向SMTP.163.COM
发送命令
sFrom.Format( _T( "MAIL From: <%s>\r\n" ), (LPCTSTR)msg->m_sFrom );
m_wsSMTPServer.Send( (LPCTSTR)sFrom, sFrom.GetLength() );
总是返回553 SMTP SERVER ERROR
该如何解决?

解决方案 »

  1.   

    这个问题我碰到过,大约是这个问题:需要认证。目前众多的免费邮件提供商(从263开始,163,新浪网也快开始了)均在smtp功能上增加了认证功能LOGIN  
    它应该比较简单。口令-应答过程如下:  1   C: AUTH LOGIN  
    2   S: 334 dXNlcm5hbWU6  
    3   C: dXNlcm5hbWU6  
    4   S: 334 cGFzc3dvcmQ6  
    5   C: cGFzc3dvcmQ6  
    6   S: 235 Authentication successful.  
    1 为客户端向服务器发送认证指令。  
    2 服务端返回base64编码串,成功码为334。编码字符串解码后为“username:”,说明要求客户端发送用户名。  
    3 客户端发送用base64编码的用户名,此处为“username:”。  
    4 服务端返回base64编码串,成功码为334。编码字符串解码后为“password:”,说明要求客户端发送用户口令。  
    5 客户端发送用base64编码的口令,此处为“password:”。  
    6 成功后,服务端返回码为235,表示认证成功可以发送邮件了。  base64Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。