esmtp的身份验证常见的有LOGIN,PLAIN,CRAM-MD5


这几种认证方式都是使用base64编码来传输,不过编码的内容不同而已


可以发送ehlo命令来获取服务器支持的认证方式:



折叠复制代码




  1. telnet smdb.vip.sohu.com 25

  2. 220 mx102 ESMTP ready

  3. ehlo vip.sohu.com

  4. 250 AUTH PLAIN LOGIN




sohu目前只支持plain和login方式认证


login方式:分别对userid和password进行base64编码,并分别发送到smtp服务器端



折叠复制代码




  1. #以login方式验证

  2. auth login

  3. #服务器返回要输入Username:

  4. 334 VXNlcm5hbWU6

  5. #输入test-1@vip.sohu.com的base64编码后的字符串

  6. dGVzdC0xQHZpcC5zb2h1LmNvbQ==

  7. #服务器返回要输入Password:

  8. 334 UGFzc3dvcmQ6

  9. #输入密码的base64编码后的串

  10. MTExMTEx

  11. #服务器返回验证ok

  12. 235 2.0.0 OK




plain方式:把userid和password通过空字节连接起来,再编码成base64,一次传递给服务器


即编码过程为:base64(空字节+userid+空字节+pass)


注意:空字节最好用00来表示,而不是,因为如果userid或password以数字开头,使用编码会出现问题



折叠复制代码




  1. #以plain方式认证

  2. auth plain

  3. #服务器返回334

  4. 334

  5. #输入base64('00test-1@vip.sohu.com00password')

  6. AHRlc3QtMUB2aXAuc29odS5jb20AMTExMTEx

  7. #服务器返回认证成功

  8. 235 2.0.0 OK




cram-md5方式:首先 服务器提供一个标记server_key


然后客户端用邮箱密码做密钥,以MD5方式加密此标记,生成HMAC=md5(password+server_key)


然后将userid连同HMAC做base64编码发送到服务器,即base64(username+" "+HMAC)


 


目前,sohu的smtp暂时还不支持cram-md5方式认证