敲开了计算机网络的小窗子。
这个学期开了计算机网络课程,学校设置的教材为AndrewS Tanenbaum的《计算机网络》,
暑假期间翻阅发现自底向上的讲解看不太懂,因此换成阅读小钟的《计算机网络-自顶向下方法》。
从引言一路看过来感觉体验很好,它能特别清楚和生动地给我讲明白计算机网络到底是怎么一回事儿,是本好书,建议阅读。
本文基于该书应用层一章,以163邮箱为例,记录了如何通过Telnet远程登录smtp邮件服务器来发送邮件。
准备工作
开启Telnet服务
控制面板 -> 程序 -> 程序和功能 -> 启用或关闭Windows功能 -> 勾选Telnet客户端 -> 确定开启邮箱POP3/SMTP/IMAP服务
登录邮箱 -> 设置 -> POP3/SMTP/IMAP -> 勾选POP3/SMTP服务和IMAP/SMTP服务 -> 保存
cmd中使用命令
1 | telnet smtp.163.com 25 |
其中smtp.163.com
是163邮箱的SMTP服务器名称,25
是邮件服务器进程的默认端口号。
此命令在本地主机与邮件服务器之间建立TCP连接,连接成功后将从该服务器收到220
回答。
打招呼
1 | S: 220 163.com Anti-spam GT for Coremail System (163com[20141201]) |
220
代表服务器已就绪,客户端发送helo
进行打招呼(xxx
处可任意填写),服务器返回250
,代表打招呼成功。
登录
1 | C: auth login |
客户端发送auth login
声明自己将进行邮箱账户的用户名认证和密码认证,服务器返回334
,指示输入账号密码。账号密码匹配成功后,服务器返回235
,代表用户验证成功。
此处有几个需要注意的点:
- 账号和密码皆需进行base64加密
- 账号带不带邮箱后缀均可
如我的邮箱lemniscatex @163.com
,加密后应输入bGVtbmlzY2F0ZXg=
或bGVtbmlzY2F0ZXhAMTYzLmNvbQ==
- 密码不是登录邮箱时的密码,而是用于登录第三方邮件客户端的授权码
授权码可在邮箱 -> 设置 -> 客户端授权密码中找到
声明邮箱地址
1 | C: mail from:<lemniscatex@163.com> |
客户端发送mail from
和rcpt to
声明邮件发送方和接收方。
写邮件
1 | C: data |
客户端发送data
声明自己将进入邮件编辑状态,服务器会提示当输入<CR><LF>.<CR><LF>
时退出编辑状态。
邮件内容有一定格式要求,包括以From:
指定邮件发送方邮箱,To:
指定邮件接收方邮箱,Subject:
指定邮件标题;邮件正文与首部行须以空行分隔开;邮件正文以单行的句点结束。
发送成功后服务器将返回250
,代表邮件已进入发送队列,此时即可打开邮箱验证邮件是否已发送成功。
此处分享几点失败经验:
- 如果不写
From:
和To:
首部行,邮件将无法成功发送 - 如果首部行和正文间不加空行,邮件可以成功发送,但是会缺失正文内容
- 如果在输入的时候回退过,发出的邮件中会显示被清除的字符以及回退符
退出
1 | C: quit |
邮件发送结束后,客户端发送quit
声明退出Telnet。
结果
完成!