zoukankan      html  css  js  c++  java
  • 邮件系统相关协议之SMTP

      1、SMTP:简单邮件传送协议。位于应用层。

      1)SMTP是存储转发协议:允许信件通过一系列的服务器发送到最终的目的地。服务器在一个队列中存储到达的信件,等待发送到下一个目的地。下一个目的地可以是本地用户,或者是另一个邮件服务器。

      SMTP是面向文本的、基于命令的协议。客户机发出一个命令,服务器处理该命令并给客户机发回一个应答。这个对话继续,直至会话结束。

      缺省情况下,命令序列是同步的,即在发出下一个命令前,必须收到前一个命令的应答(但协议的某个扩展使用了流水线,放松了这个同步要求)。

      沿任一方向发送的每一行以CRLF终止。

      2)命令与应答

      从客户机发送的每个命令行由一个4字符命令后跟一组可选的参数组成。所有命令都是不区分大小写的。

      应答的主要目的是表达成功或失败状态信息。应答由3位数字应答代码+空格+可阅读描述组成。这个应答格式是从FTP协议继承下来的。对于多行应答,“-”用作指示有更多的应答行到达。

      3位应答代码中的每一位传递不同层次的信息。

      (1)第1位是最重要的,传递命令是成功还是失败的信息。

      1:肯定初步应答。命令成功,但服务器期望客户机提供附加的信息。没有SMTP命令使用这个应答类型。

      2:肯定完成应答。命令成功,且服务器不要求任何其他的信息。如常见的250。

      3:肯定中间应答。命令成功,且服务器提示(需要)其他的数据。目前data是使用这个应答类型的唯一命令。

      4:临时否定应答。临时失败,以后尝试该命令可能成功。如典型的磁盘空间不足。

      5:永久失败。重试也不能成功。如语法错误和未知用户。

      (2)第2位指定应答的类别。

      0:与命令的语法有关,(上述的)永久失败是使用它的唯一应答。

      1:对附加信息请求的应答,仅由对help命令的应答使用。

      2:通信通道。与通信通道有关的应答包括连接问候、quit命令和服务器关闭连接的通知。

      5:邮件系统,有最大的变化。其他值仅用于3~5个命令,而这个值用于12个命令。

      (3)第3位为前2位的各种组合提供更进一步的分类。对第3位的特定值没有特殊的意义,仅用于区分前2位的特定组合。

      3)使用示例。在命令行上使用SMTP发送邮件:

      dig -t A smtp.icoremail.net。以下是部分输出:

    ;; QUESTION SECTION:
    ;smtp.icoremail.net.		IN	A
    
    ;; ANSWER SECTION:
    smtp.icoremail.net.	600	IN	CNAME	mail1.icoremail.net.
    mail1.icoremail.net.	600	IN	A	223.252.214.65
    mail1.icoremail.net.	600	IN	A	223.252.214.64

      telnet 223.252.214.65 25。以下黑体字为用户输入的SMTP命令,灰体字为相应的SMTP应答,"//"后为注释:

    helo localhost
    250 OK
    auth login
    334 dXNlcm5hbWU6
    dGVzdA==      // 用户名test的base64编码(`echo -n "test" | base64`)
    334 UGFzc3dvcmQ6
    YXN3MjM0Mndl    // 密码asw2342we的base64编码
    235 Authentication successful
    mail from:<test@coremail.cn>
    250 Mail OK
    rcpt to:<31***09@qq.com>
    250 Mail OK
    data
    354 End data with <CR><LF>.<CR><LF>
    from:<test@coremail.cn>
    to:<31***09@qq.com>
    subject:A Test Mail.
    
    This is just a test mail.  // 正文与subject之间需要一个空行
    .
    250 Mail OK queued as AQIMCgDHQz3qexZWMDIUAQ--.51371S2

      关于base64编码可参考http://www.cnblogs.com/hanerfan/p/4079846.html

      参考资料:

      《Internet Email协议开发指南》

      《TCP/IP详解 卷1:协议》

    不断学习中。。。

  • 相关阅读:
    c/c++设置图片为透明图
    转;说说AngularJS中的$parse和$eval
    转: css3: display:box详解
    转: 深入理解 AngularJS 的 Scope
    转:说说angularjs中的$parse和$eval
    转: 理解AngularJS中的依赖注入
    angularjs学习总结(快速预览版)
    XML基础知识
    读书笔记:js设计模式
    contains 和 ele.compareDocumentPosition确定html节点间的关系
  • 原文地址:https://www.cnblogs.com/hanerfan/p/4666091.html
Copyright © 2011-2022 走看看