http://www.rosoo.net/a/201106/14594.html
3.2. ESMTP
ESMTP最显著的地方是添加了用户认证功能。如果用户想使用ESMTP提供的新命令,则在初次与服务器交互时,发送的命令应该是EHLO而不是HELO。先来看一个例子。
C:telnet smtp.126.com 25 /* 以telnet方式连接126邮件服务器 */
S:220 126.com Anti-spam GT for Coremail System (126com[071018]) /* 220为响应数字,其后的为欢迎信息,会应服务器不同而不同*/
C:EHLO smtp.126.com /* 除了HELO所具有的功能外,EHLO主要用来查询服务器支持的扩充功能 */
S:250-mail
S:250-AUTH LOGIN PLAIN
S:250-AUTH=LOGIN PLAIN
S:250 8BITMIME /* 最后一个响应数字应答码之后跟的是一个空格,而不是’-‘ */
C:AUTH LOGIN /* 请求认证 */
S:334 dxNlcm5hbWU6 /* 服务器的响应——经过base64编码了的“Username” */
C:Y29zdGFAYW1heGl0Lm5ldA== /* 发送经过BASE64编码了的用户名 */
S:334 UGFzc3dvcmQ6 /* 经过BASE64编码了的”Password:” */
C:MTk4MjIxNA== /* 客户端发送的经过BASE64编码了的密码 */
S:235 auth successfully /* 认证成功 */
C: MAIL FROM: bripengandre@126.com /* 发送者邮箱 */
S:250 … ./* “…”代表省略了一些可读信息 */
C:RCPT TO: bripengandre@smail.hust.edu.cn /* 接收者邮箱 */
S:250 … ./* “…”代表省略了一些可读信息 */
C:DATA /* 请求发送数据 */
S:354 Enter mail, end with “.” on a line by itself
C:Enjoy Protocol Studing
C:.
S:250 Message sent
C:QUIT /* 退出连接 */
S:221 Bye
对于这个例子有如下几点说明。
1) 只是一个示意性的过程,再输入用户名、密码时需采用base64编码,这需要专门的计算,所以在telnet终端上模拟比较麻烦。
2) 认证过程有很多种,有基于明文的认证,也有基于MD5加密的认证,这里给出的只是一个示意性的过程。
3) EHLO对于具体服务器,响应会不同,关键字“8BITMIME”用来说明服务器是否支持正文中传送8位ASCII码,而以“X”开头的关键字都是指服务器自定义的扩充(还没纳入RFC标准)
更详细的说明,请参看RFC1425。