通过Telnet实践,能够大大加深对TCP/IP协议栈的理解。这里,选取应用层的SMTP协议,通过Telnet,创建一个向任何接收方发送电子邮件的简单邮件客户。
这里,选取常用的两个邮箱(qq邮箱、gmail),首先创建一个与smtp.qq.com的TCP连接(这里需要身份验证),然后使用SMTP协议与邮件服务器进行交谈,经该邮件服务器(一个QQ邮箱)向某接收方(一个gmail邮箱)能够一个电子邮件报文,最后关闭与该邮件服务器的TCP连接。下面是具体实现:
swangooseman:~$ telnet smtp.qq.com 25 //telnet到邮件服务器的25 SMTP端口
Trying 163.177.65.211…
Connected to smtp.qq.com.
Escape character is ‘^]’.
smtp.qq.com Esmtp QQ Mail Server // 服务器返回
ehlo a // 用ehlo申明,表示自己需要身份验证
250-smtp.qq.com
250-PIPELINING
250-SIZE 73400320
250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN
250-MAILCOMPRESS
8BITMIME // 服务器返回
auth login // 用这个命令表示身份验证开始
VXNlcm5hbWU6 // 服务器返回
ODQ3OTQxNTMz // 用户名经过base64编码的串,转换:http://www.mxcz.net/tools/base64.aspx
UGFzc3dvcmQ6 // 服务器返回
****** // 密码,也要经过base64编码
Authentication successful // 服务器返回
mail from: 847941533@qq.com // 声明邮件来源email地址
Ok // 服务器返回
rcpt to: swangooseman@gmail.com // 声明目的email地址
Ok // 服务器返回
data // 邮件开始
End data with . // 服务器返回
subject: Test // 主题
from: 847941533@qq.com
to: swangooseman@gmail.com
Hello! My name is swangooseman!
Pleased to meet you. This is my first e-mail by SMTP server!
. // “.”号表示邮件主体的结束。
Ok: queued as
quit // 请求与服务器断开链接
Bye
Connection closed by foreign host. // 服务器返回
swangooseman:~$ // 至此,通过SMTP,邮件发送完成,可登陆到邮箱查看。