zoukankan      html  css  js  c++  java
  • 计算机网络-应用层(3)Email应用

    因特网电子邮箱系统主要由用户代理(user agent) 、邮件服务器(mail server) 和简单邮件传输协议(SMTP)组成
     
    邮件服务器(Mail Server)
    邮箱:存储发给该用户的Email
    报文队列(message queue):存储等待发送的Email,如果几天后仍不能成功,服务器就删除该报文并以电子邮件的形式通知发送方
     
    SMTP用于从发送方的邮件服务器发送报文到接收方的邮件服务器。
    使用TCP进行email消息的可靠传输
    每台邮件服务器上既运行SMTP的客户端也运行SMTP的服务器端
    Email消息只能包含7位ASCII码,如果某报文包含了非7比特ASCII字符或二进制数据,则该报文必须按照7比特ASCII 码进行编码,传输后解码还原。
    传输过程分握手、消息的传输、关闭三个阶段:
    S: 220 hamburger.edu
    C: HELO crepes.fr
    S: 250 Hello crepes.fr, pleased to meet you
    C: MAIL FROM: <alice@crepes.fr>
    S: 250 alice@crepes.fr... Sender ok
    C: RCPT TO: <bob@hamburger.edu>
    S: 250 bob@hamburger.edu... Recipient ok
    C: DATA
    S: 354 Enter mail, end with "." on a line by itself
    C: Do you like ketchup?
    C: How about pickles?
    C: .     
    S: 250 Message accepted for delivery
    C: QUIT
    S: 221 hamburger.educlosing connection
    报文体前面通常有一个包含环境信息的首部位, 其必须含有一个From: 首部行、一个To: 首部行,可以包含一个Subject : 首部行以及其他可选的首部行。(首部行是邮件报文自身的一部分)
    必须含有一个From: 首部行和一个To: 首部行;一个首部也许包含一个Subject : 首部行以及其他可选的首部行。
    SMTP用的是持久性连接:如果发送邮件服务器有几个报文发往同一个接收邮件服务器,它可以通过同一个TCP 连接发送这些所有的报文。对每个报文,该客户用一个新的MAIL FROM:XXXX 开始,用一个CRLF.CRLF指示该邮件的结束,并且仅当所有邮件发送完后才发送QUIT 。
     
    与HTTP对比:
    HTTP主要是一个拉协议(pullprotocol);SMTP主要是一个推协议(pushprotocol)
    都使用命令/响应交互模式,命令和状态代码都是ASCII码
    HTTP 把每个对象封装到它自己的HTTP 响应报文中;SMTP 则把所有报文对象放在一个报文之中。
     
    STMP协议的扩展协议:MIME协议
    MIME协议定义了5种头部,用来加在原始的STMP头部,以便定义参数的转换。
    例如:
    From: alice@crepes.fr
    To: bob@hamburger.edu
    Subject: Picture of yummy crepe.
    MIME-Version: 1.0                   //MIME版本
    Content-Transfer-Encoding: base64   //数据编码方式
    Content-Type: image/jpeg            //多媒体数据的类型、子类型以及参数声明
     
    base64 encoded data …..             //编码后的数据
    .........................
    ......base64 encoded data

    邮件访问协议:用于从服务器获取邮件

    • 第三版的邮局协议(Post Office Protocol-Version 3, POP3)
    当用户代理(客户)打开了一个到邮件服务器(服务器)端口110上的TCP 连接后, POP3 就开始工作了。
    随着建立TCP连接, POP3 按照三个阶段进行工作:特许(authorization) 、事务处理以及更新。
    分为下载并删除和下载并保持两种模式。
    POP3是无状态的:POP3 服务器并不在POP3 会话过程中携带状态信息
    S: +OK POP3 server ready
    C: user bob
    S: +OK
    C: pass hungry
    S: +OK user successfully logged on
    C: list
    S: 1 498
    S: 2 912
    S: .
    C: retr 1
    S: <message 1 contents>
    S: .
    C: dele 1
    C: retr 2
    S: <message 1 contents>
    S: .
    C: dele 2
    C: quit
    S: +OK POP3 server signing off
    特许阶段,用户代理发送(以明文形式)用户名和口令以鉴别用户。
    两个主要的命令: user < user name >和pass < password > ,服务器回答+OK或-ERR
    事务处理阶段,用户代理取回报文、对报文做删除标记、取消报文删除标记、获取邮件的统计信息。
    用户代理仅使用四个命令: list(列出消息数量)、retr(用编号获取消息)、dele和quit,在处理quit命令后, POP3服务器进入更新阶段,结束该POP3 会话。该邮件服务器删除那些被标记为删除的报文。
    • 因特网邮件访问协议(IMAP)
    所有消息统一保存在服务器
    把每个报文与一个文件夹联系起来,当报文第一次到达服务器时,它与收件人的INBOX 文件夹相关联。收件人则能够把邮件移到一个新的、用户创建的文件夹(阅读邮件,删除邮件等)中。
    为用户提供了创建文件夹、将邮件从一个文件夹移动到另一个文件夹、在远程文件夹中查询邮件的命令
    维护了IMAP会话的用户状态信息,例如文件夹的名字以及哪些报文与哪些文件夹相关联。
    具有允许用户代理获取报文组件的命令。一个用户代理可以只读取一个报文的报文首部,或只是一个多部分MIME 报文的一部分。
    • 基于Web的电子邮件
    用户代理就是普通的浏览器
    邮件服务器在与其他的邮件服务器之间发送和接收邮件时,仍然使用的是SMTP协议
  • 相关阅读:
    sqlserver中递归写法
    keytools命令生成证书
    java中sql语句快速处理
    select * 替换写法
    oracle行转列
    oracle中查看当前用户的表结构、主键、索引
    Servlet三种实现方式
    【python之旅】python的面向对象
    【python之旅】python的模块
    【python之旅】python的基础三
  • 原文地址:https://www.cnblogs.com/yangyuliufeng/p/9263634.html
Copyright © 2011-2022 走看看