SMTP( Simple Mail Transfer Protocol, 简单邮件传输协议 )
信封
包含发送者地址、传输模式、一个或多个接收者地址
内容
使用头部和主体组成
> nc smtp.163.com 25
< 220 163.com Anti-spam GT for Coremail System (163com[20141201])
当开启一个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扩展服务有关,不同的服务器返回内容一般不同
在EHLO
命令中,服务器会返回所支持的认证方式,就本例而言,该SMTP服务器支持LOGIN
和PLAIN
两种方式,当然,SMTP验证还有GSSAPI
、CRAM-MD5
等
使用LOGIN
方式登陆,用户名和密码使用Base64加密加密
> AUTH LOGIN
< 334 dXNlcm5hbWU6
> base64(my name)
< 334 UGFzc3dvcmQ6
> base64(my password)
> 235 Authentication successful
语法:MAIL
参数reverse-path
表示反向路径,其中包含发送过程中经过的主机名列表以及邮箱名,列表中第一个主机就是发送此命令的主机,可用于接收错误信息。当然在使用过程中,我们简单的设为自己的邮箱名就好
此命令告诉服务器新的发送操作已经开始,服务器会复位所有状态表和缓冲区(包括接收人和邮件数据)
> MAIL FROM:<[email protected]>
< 250 Mail OK
语法:RCPT
参数forward-path
包含主机的路由表和目的邮箱,在其中的第一个主机就是接收命令的主机。作为用户简单的设置接收者的邮箱地址就可以
可以设置多个接收者
> RCPT TO:<[email protected]>
< 250 Mail OK
> RCPT TO:<[email protected]>
< 550 User not found
如果命令被接收,服务器返回一个250 OK应答。如果接收者未知,接收方会返回一个550 Failure应答
语法: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
上述的命令需要按顺序执行,邮件才能发送成功,可以到自己的邮箱中查看,如果没有找到,或许被放入了垃圾箱里