关于SMTP邮件传输协议的一点感悟

来源:互联网 发布:有源光纤网络 编辑:程序博客网 时间:2024/06/06 02:50

    SMTP(简单邮件传输协议) 是一种用于客户机向邮件服务器或者是不同的邮件服务器之间发送文件的一种邮件传输协议。

    SMTP是一个“推”的协议,它不允许根据需要从远程服务器上“拉”来消息。要做到这点,邮件客户端必须使用POP3或IMAP。另一个SMTP服务器可以使用ETRN在SMTP上触发一个发送。【引自百度百科】

    细节性问题:SMTP服务器使用的端口号为25,说明:这个在使用telnet登录邮件服务器的时候,需要用到端口号。

                              协议基于tcp连接,使用tcp的原因是保证可靠的数据传输

数据传输的大体过程为:

客户端与服务器端建立起tcp连接,一旦连接建立成功,服务器会返回“220 server ready (服务就绪)”的应答

客户端接受到了应答后,向服务器发送“helo”命令,并且在该命令后面加上客户端的主机名,登录时需要填写用户名和密码。在telnet中先进行用户名,后进行密码输入。

若服务器不可用,会返回“421 server not available (服务器不可用)”应答,本次邮件传输失败,否则返回“250 ok”,

客户端收到这个应答后,向服务器发送“mail ”命令,并在该命令后附加上发件人的邮箱地址。

若服务器不可用,则会返回具体的原因,比如452(存储空间不够用),500(命令无法识别)本次邮件传输失败,否则返回“ 250 ok”应答

客户端会发送一个或者多个的“rcpt”命令,(对应的是一个或者是多个的接受者情况)

客户端每次发送一个“rcpt”命令时,服务器都会返回相应的应答,如果处理失败,会返回相应的状态码,(比如“550 no such  user here”说明邮件发送失败);否则返回“250 OK”应该。

客户端发送“data”命令,表示开始传送邮件了。

若服务器无法接收邮件,回复那会具体的原因,本次邮件发送失败,否则,服务器会返回“354 start mail input;end with \r\n . \r\n”。

客户端收到这个回应后,就开始发送邮件的首部和正文部分了,发送完成后,再次发送“\r\n . \r\n”以通告服务器邮件传输完成

如果服务器正确接受了邮件,则会返回“250 ok”应答

邮件发送完成后,客户端发送“quit”命令

服务器返回“221” 表示同意释放tcp连接

双方释放tcp连接,通信过程结束。

(本来用wireshark已经抓好了包的,因为涉及到了个人的隐私的问题,所以,也就不上图了,图片大概就是这个程序)


推荐邮件客户端 Foxmail(腾讯副总裁张小龙的作品,顺便说一下,微信也是他的原作,只是被腾讯收买。了不起的人物)


0 0