SMTP

SMTP通信模型:

  1. 用户产生邮件请求
  2. sender-SMTP和receiver-SMTP之间创建一个双向传输通道。
    1. receiver-SMTP可以是终端目的地或者是中转。
    2. sender-SMTP和receiver-SMTP之间传递SMTP命令
  3. sender-SMTP发送MAIL命令并指明邮件的发送者
  4. 如果receiver-SMTP可以接收邮件,就会返回给sender-SMTP一个OK
  5. sender-SMTP发送RCPT命令并指明邮件的接收者
  6. 如果receiver-SMTP可以为指定的接收者接收邮件就返回OK,否则就返回拒绝接收(但是不是整个邮件传输)
  7. 如果receiver-SMTP拒绝接受,sender-SMTP和receiver-SMTP之间可以继续协商
  8. 协商成功之后,sender-SMTP发送数据
  9. receiver-SMTP接收到之后返回OK

以上sender-SMTP和receiver-SMTP对话的步骤是步锁的,一次一步

命令和响应是大小写不敏感的

SMTP程序:

发送邮件:
1.MAIL <SP> FROM:<reverse-path> <CRLF>
告知SMTP-receiver一个新的邮件传输启动
让SMTP-receiver重设所有的状态表和缓存,包含接收者和邮件数据
reverse-path可以用来报告错误
如果SMTP-receiver成功接收,就会返回一个250 OK
reverse-path可以有多个邮箱,但是第一个应该是发送命令的主机
2.RCPT <SP> TO:<forward-path> <CRLF>
通过forward-path指定一个接收者
如果SMTP-receiver接收并接受就会返回250 OK并保存接收者
如果接收者是未知的,就会返回550 Failure
此命令可重复多次
forward-path可以包含多个邮箱,但是第一个应该是接收命令的主机
3.DATA <CRLF>
如果SMTP-receiver接收到就会返回354 Intermediate,然后接收后续的所有行作为邮件正文(后续行不需要DATA指示)
接收到文件尾并保存后会返回250 OK,标记文件结束的方式是只含有一个句号的行
此命令应只会在事务不明确(如没有接收者)或是资源不可使用是失败

TCP传输服务:

连接建立:
建立在发送进程和接收进程之间的全双工连接被作为传输通道,此协议被分配到服务端口(接收进程端口)25。发送端口是本机的一个动态端口
所以要确保发送程序可以访问服务器的25端口
数据传输:
TCP连接支持8位字节传输,SMTP数据是7位ASCII码字符,每个字节的高位置0


 

猜你喜欢

转载自blog.csdn.net/qq_40711741/article/details/83896236