SMTP协议

SMTP( Simple Mail Transfer Protocol, 简单邮件传输协议 )

一封邮件是由信封和内容构成
  • 信封包含发送者地址、传输模式、一个或多个接收者地址

  • 内容使用头部和主体组成

    • 头部的结构是键/值对的集合,并且必须是使用US ASCII进行编码
    • 主体是文本结构,通常使用US ASCII编码,但一些扩展(比如MIME)放开了这种限制

连接网易SMTP服务器

> nc smtp.163.com 25
< 220 163.com Anti-spam GT for Coremail System (163com[20141201])
EHLO命令

当开启一个SMTP会话时,第一个命令是EHLO或者HELO

当客户端支持扩展SMTP协议,则应该发送EHLO命令

服务器接收到EHLO命令:如果命令不被允许,则返回状态码501;如果没有实现该命令,则返回状态码502

可以理解为扩展SMTP协议使用EHLO命令来替代传统SMTP协议中的HELO命令

语法:EHLO

sp表示空格,CRLF表示回车换行,参数domain表示邮件发送者(指用户名或者主机名)

> EHLO myself
< 250-mail
< 250-PIPELINING
< 250-AUTH LOGIN PLAIN
< 250-AUTH=LOGIN PLAIN
< 250-coremail 1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UrhOTc3UCa0xDrUUUUj
< 250-STARTTLS
< 250 8BITMIME

返回的内容与服务器提供的SMTP扩展服务有关,不同的服务器返回内容一般不同

AUTH命令

EHLO命令中,服务器会返回所支持的认证方式,就本例而言,该SMTP服务器支持LOGINPLAIN两种方式,当然,SMTP验证还有GSSAPICRAM-MD5

使用LOGIN方式登陆,用户名和密码使用Base64加密加密

> AUTH LOGIN
< 334 dXNlcm5hbWU6
> base64(my name)
< 334 UGFzc3dvcmQ6
> base64(my password)
> 235 Authentication successful
MAIL FROM命令

语法:MAIL FROM:

参数reverse-path表示反向路径,其中包含发送过程中经过的主机名列表以及邮箱名,列表中第一个主机就是发送此命令的主机,可用于接收错误信息。当然在使用过程中,我们简单的设为自己的邮箱名就好

此命令告诉服务器新的发送操作已经开始,服务器会复位所有状态表和缓冲区(包括接收人和邮件数据)

> MAIL FROM:<[email protected]>
< 250 Mail OK
RCPT TO命令

语法:RCPT TO:

参数forward-path包含主机的路由表和目的邮箱,在其中的第一个主机就是接收命令的主机。作为用户简单的设置接收者的邮箱地址就可以

可以设置多个接收者

> RCPT TO:<[email protected]>
< 250 Mail OK
> RCPT TO:<[email protected]>
< 550 User not found

如果命令被接收,服务器返回一个250 OK应答。如果接收者未知,接收方会返回一个550 Failure应答

DATA命令

语法:DATA

如果命令被接收,服务器返回一个354 Intermediate应答。这时写完信件内容,在最后一行仅发送一个句号来表示邮件内容的结束(接受者不会收到该句号),当信件结尾收到并存储后,接收者发送一个250 OK应答。

信件内容的头部应该包含Date(时间), Subject(标题), To(收件人), Cc(抄送), From(发件人)这些基本信息

> DATA
< 354 End data with <CR><LF>.<CR><LF>
> from:<[email protected]>
> to:<[email protected]>
> subject:hello world
> 
> hello,this is a mail
> .
< 250 Mail OK queued as smtp4,DtGowAC3N2HNfaRc+oFDAA--.262S2 1554284072

上述的命令需要按顺序执行,邮件才能发送成功,可以到自己的邮箱中查看,如果没有找到,或许被放入了垃圾箱里

SMTP协议_第1张图片

服务器应答状态码

  • 220 服务器服务就绪
  • 250 命令操作完成
  • 334 等待客户端输入

你可能感兴趣的:(SMTP协议)