Telnet中使用smtp发送邮件
Telnet
是远程登录服务的标准协议和主要方式,工作于TCP/IP
协议族的应用层,常用于远程登录web
服务器,其中便包括SMTP
,POP3
等邮件服务器。
这几天参考书籍《计算机网络-自顶向下方法》学习计算机网络知识,顺便尝试了如何使用Telnet
登录smtp
发送邮件,下面通过一个简单示例介绍具体的发送过程。
Telnet smtp.163.com 25
smtp
对应的端口号为25
,以163邮箱为例,下面是邮件发送过程。
→ ~ telnet smtp.163.com 25
Trying 220.181.12.15...
Connected to smtp.163.com.
Escape character is ^].
220 163.com Anti-spam GT for Coremail System (163com[20141201])
helo 163.com
250 OK
auth login
334 dXNlcm5hbWU6
MTgyNjY2MzI4NzJAMTYzLmNvbQ==
334 UGFzc3dvcmQ6
****************
235 Authentication successful
mail from:<182****2872@163.com>
250 Mail OK
rcpt to:<707***098@qq.com>
250 Mail OK
data
354 End data with <CR><LF>.<CR><LF>
From: 182****2872@163.com
To: 707***098@qq.com
Subject: Test the use of smtp
Hello, litreily.
This is a message edit with telnet.
Best wish to you.
Litreily
.
250 Mail OK queued as smtp11,D8CowAAnjlqKlZVZXa4QAQ--.18342S2 1502975693
quit
Connection closed by foreign host.
→ ~
下面分开对每个过程进行解析,C
代表客户端,即本机,S
代表远程服务器端。整个过程分为以下几步:
- 打招呼
- 账户认证
- 声明邮箱地址
- 书写邮件内容
- 退出
Telnet
招呼语
S 220 163.com Anti-spam GT for Coremail System (163com[20141201])
C helo 163.com
S 250 OK
220
代表服务器已准备好,客户端首先向服务器打一声招呼helo
,服务器接收到后返回一个250
应答信号,代表打招呼成功,下面可以进行账户的密码认证。
账户认证
C auth login
S 334 dXNlcm5hbWU6
C MTgyNjY2MzI4NzJAMTYzLmNvbQ==
S 334 UGFzc3dvcmQ6
C ****************
S 235 Authentication successful
客户端发送auth login
声明自己将进行邮箱账户的用户名认证和密码认证。服务器端返回一个以334
代码开头的提示信息,不必追究其语义,而后用户依次输入通过Base64
加密的邮箱名和密码,加密网址见后续参考资料。当输入的账号密码无误时,服务端将返回认证成功的提示语。
声明邮箱地址
C mail from:<182****2872@163.com>
S 250 Mail OK
C rcpt to:<707***098@qq.com>
S 250 Mail OK
账户密码认证结束后,客户端通过mail from:<emailName>
以及rcpt to:<nameEmail>
声明邮箱的源地址和目的地址。
书写邮件内容
C data
S 354 End data with <CR><LF>.<CR><LF>
C From: 182****2872@163.com
C To: 707***098@qq.com
C Subject: Test the use of smtp
C
C Hello, litreily.
C This is a message edit with telnet.
C
C Best wish to you.
C Litreily
C .
S 250 Mail OK queued as smtp11,D8CowAAnjlqKlZVZXa4QAQ--.18342S2 1502975693
写明邮件地址后,使用指令data
进入邮件编辑状态,服务器端会提示当输入<CR><LF>.<CR><LF>
时退出编辑状态。
邮件内容有一定的格式要求,不按要求随意书写有可能被当成垃圾邮件或不合法邮件而退信。通常需要指定邮件主题Subject
,其它相关信息包括时间Date
,邮件地址From
,To
等,然后再书写邮件主体内容,更详细的格式可以参考文档【RFC 821】。编辑结束后,以单行的点号.
结束。如果一切正常,服务器端将返回以250
开头的应答信息,并提示邮件以进入smtp
的发送队列。此时便可以查收邮件予以验证了。
退出Telnet
C quit
S Connection closed by foreign host.
当邮件发送结束后,客户端通过quit
退出Telnet
。
SMTP Code
211
系统状态或系统帮助响应214
帮助信息220
服务就绪221
服务关闭传输信道235
用户验证成功250
要求的邮件操作完成251
用户非本地,将转发向334
等待用户输入验证信息354
开始邮件输入,以单行**.**结束421
服务未就绪,关闭传输信道(当必须关闭时,此应答可以作为对任何命令的响应)450
要求的邮件操作未完成,邮箱不可用(例如,邮箱忙)451
放弃要求的操作;处理过程中出错452
系统存储不足,要求的操作未执行500
格式错误,命令不可识别(此错误也包括命令行过长)501
参数格式错误502
命令不可实现503
错误的命令序列504
命令参数不可实现535
用户验证失败550
要求的邮件操作未完成,邮箱不可用(例如,邮箱未找到,或不可访问)551
用户非本地,请尝试552
过量的存储分配,要求的操作未执行553
邮箱名不可用,要求的操作未执行(例如邮箱格式错误)554
操作失败
参考资料
SMTP
文档(RFC 821
) : https://tools.ietf.org/pdf/rfc821.pdfSMTP Code
: http://bbs.csdn.net/topics/80275246163.com
邮件退信代码 : http://help.163.com/09/1224/17/5RAJ4LMH00753VB8.html
版权声明:本博客所有文章除特殊声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明出处 litreily的博客!