【计算机网络】应用层电子邮件协议

一、电子邮件系统架构

电子邮件是一个典型的异步通信系统,发送方从UA,也就是邮件客户端,通过应用层SMTP协议,传输层tcp协议,发送给发送方的邮件服务器,比如使用的是163邮箱,163提供的SMTP服务器就是smtp.163.com发送方给这个地方发送。

之后,这个163 smtp服务器又会作为smtp客户端,再次通过应用层SMTP,传输层TCP给接收方的邮件服务器发邮件。

最后收件人会通过POP或IMAP协议,从他的POP3或IMAP服务器把他的邮件pop出来,还是走TCP连接。

注意这里都是客户端和服务器通信,走的都是典型的Client-Server架构。

例如,发送方邮件服务器,在接收发件人发来的邮件的时候,是作为服务器,然后他在给接收方邮件服务器送信的时候,是作为客户端。

这里我们把发送方邮件服务器——接收方邮件服务器这一大块,叫做电子邮件系统,这里面一定是走SMTP的。这之外,比如现在很多邮箱提供网页端,那么从发送方到发送方服务器这个过程就有可能走HTTP了,接收方服务器到接收方这里也是同理,可以走HTTP。

、SMTP(Simple Mail Transfer Protocol)

整个过程的大部分应用层协议走的都是SMTP,先看看SMTP。

它主要规定了这个客户端和服务器通信的过程,不含加密和认证,而且SMTP只能传7bit-ASCII码,这是上古时代的ASCII码,只包含了前128个字符。看下面这个通信的过程。

客户端和服务器通过简单的helo来建立连接,然后说这是从谁来的,给谁发的。

之后是信息的头和body,最后在把连接断掉。

这是一个原来的简单的邮件的格式,包括这些很基础的内容。

后来发现我们要传一些别的,视频、音频、文件、甚至二进制代码,为了遵循开闭原则,不对原先的系统修改,只添加功能,那就需要一种方式把这些东西映射成7bit-ASCII码,再走SMTP。

三、MIME(Multipurpose Internet Mail Extension)

就有了这个MIME扩展,

它通过规定了很多的Content Type,来支持不同样式的信息。

来看这样一个例子,最上面的是MIME的头,接着就是Content,type是mutipart-alternative,里面就是各种格式的信息,他还定义了一个boundary,来分隔不同的信息。

例如下面第一个content-type是text/html,然后用那个boundary分隔,然后是mesage/external-body,最后是一个音频文件。

四、POP3和IMAP

就是很简单的从邮件服务器pop出来消息到本地。

看这里都是些很简单的消息,把邮件都list出来,把某个邮件retrieve出来,然后删除某个邮件,最后退出。

这里就是POP3的局限,只能把整个邮件POP出来才能看。

IMAP可以把邮件的一部分POP出来。

相关推荐

  1. 计算机网络——应用(3)电子邮件

    2023-12-09 05:50:07       15 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-09 05:50:07       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-09 05:50:07       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-09 05:50:07       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-09 05:50:07       20 阅读

热门阅读

  1. MongoDB SASL 鉴权方式 SCRAM-SHA-1步骤

    2023-12-09 05:50:07       29 阅读
  2. 前端常用设计模式详细解析

    2023-12-09 05:50:07       34 阅读
  3. 跟着GPT学设计模式之建造者模式

    2023-12-09 05:50:07       42 阅读
  4. A类中创建posix线程,线程间如何通信

    2023-12-09 05:50:07       36 阅读
  5. centos7做gitlab数据灾备项目地址指向问题

    2023-12-09 05:50:07       35 阅读
  6. C#反射加载程序集并使用

    2023-12-09 05:50:07       41 阅读
  7. 蓝桥杯:货物摆放

    2023-12-09 05:50:07       33 阅读
  8. react的sass模块化引入

    2023-12-09 05:50:07       40 阅读
  9. 更新 Node.js 和 npm 使用 nvm

    2023-12-09 05:50:07       40 阅读
  10. kubernetes的服务发现(二)

    2023-12-09 05:50:07       39 阅读