zoukankan      html  css  js  c++  java
  • 【RL-TCPnet网络教程】第33章 SMTP简单邮件传输协议基础知识

    第33章      SMTP简单邮件传输协议基础知识

    本章节为大家讲解SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)的基础知识,方便后面章节的实战操作。

    (本章的知识点主要整理自网络)

    33.1  初学者重要提示

    33.2  SMTP基础知识参考资料

    33.3  SMTP基础知识点

    33.4  总结

    33.1  初学者重要提示

    SMTP简单邮件传输协议在实际项目中有一些实用价值,需要初学者对SMTP的基础知识也有个认识。

    33.2  SMTP基础知识参考资料

    大家可以从以下地址获得SMTP基础知识:

    • wiki百科中文版SMTP:地址链接(这个是超链接)
    • wiki百科英文版SMTP:地址链接(这个是超链接)
    • 百度百科SMTP:地址链接(这个是超链接)

    对于初学者来说,学习上面三个参考资料就够了。如果大家有网络方面的书籍,比如《TCP/IP详解》,也可以直接看书籍。

    33.3  SMTP基础知识点

    (这里的知识点整理自上面的参考资料地址)

    教程这里也对SMTP的基础知识做个介绍,方便大家先有个大概的认识。

    33.3.1 SMTP简要说明

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。

    它使用由TCP提供的可靠的数据传输服务把邮件消息从发信人的邮件服务器传送到收信人的邮件服务器。跟大多数应用层协议一样,SMTP也存在两个端:在发信人的邮件服务器上执行的客户端和在收信人的邮件服务器上执行的服务器端。SMTP的客户端和服务器端同时运行在每个邮件服务器上。当一个邮件服务器在向其他邮件服务器发送邮件消息时,它是作为SMTP客户在运行。

    SMTP协议与人们面对面交互的礼仪之间有许多相似之处。首先,运行在发送端邮件服务器主机上的SMTP客户,发起一个到运行在接收端邮件服务器主机上的SMTP服务器端口号25之间的TCP连接。如果接收邮件服务器当前不在工作,SMTP客户就等待一段时间后再尝试建立该连接。SMTP客户和服务器先执行一些应用层握手操作。就像人们在转手东西之前往往先自我介绍那样,SMTP客户和服务器也在传送信息之前先自我介绍一下。在这个SMTP握手阶段,SMTP客户向服务器分别指出发信人和收信人的电子邮件地址。彼此自我介绍完毕之后,客户发出邮件消息。

    33.3.2 SMTP定义

    SMTP是一种TCP协议支持的提供可靠的电子邮件传输的应用层协议。SMTP是建立在TCP上的一种邮件服务,主要用于传输系统之间的邮件信息。

    SMTP独立于特定的传输子系统,且只需要可靠有序的数据流信道支持。SMTP重要特性之一是其能跨越网络传输邮件,即“SMTP邮件中继”。使用SMTP,可实现相同网络上处理机之间的邮件传输,也可通过中继器或网关实现某处理机与其它网络之间的邮件传输。在这种方式下,邮件的发送可能经过从发送端到接收端路径上的大量中间中继器或网关主机。域名服务系统(DNS)的邮件交换服务器可以用来识别出传输邮件的下一条 IP 地址。

    SMTP是一个相对简单的基于文本的协议。在其之上指定了一条消息的一个或多个接收者(在大多数情况下被确认是存在的),然后消息文本会被传输。可以很简单地通过telnet程序来测试一个SMTP服务器。SMTP使用TCP端口25。要为一个给定的域名决定一个SMTP服务器,需要使用MX (Mail eXchange)DNS。

    在八十年代早期SMTP开始被广泛地使用。当时,它只是作为UUCP的补充,UUCP更适合于处理在间歇连接的机器间传送邮件。相反,SMTP在发送和接收的机器始终连接在网络的情况下工作得最好。

    Sendmail是最早实现SMTP的邮件传输代理之一。到2001年至少有50个程序将SMTP实现为一个客户端(消息的发送者)或一个服务器(消息的接收者)。一些其他流行的SMTP服务器程序包括了Philip Hazel的exim,IBM的Postfix,D. J. Bernstein的Qmail,以及Microsoft Exchange Server。

    由于这个协议开始是基于纯ASCII文本的,它在二进制文件上处理得并不好。诸如MIME的标准被开发来对二进制文件进行编码以使其通过SMTP来传输。今天,大多数SMTP服务器都支持8位MIME扩展,它使二进制文件的传输变得几乎和纯文本一样简单。

    SMTP是一个“推”的协议,它不允许根据需要从远程服务器上“拉”来消息。要做到这点,邮件客户端必须使用POP3或IMAP。另一个SMTP服务器可以使用ETRN在SMTP上触发一个发送。

    33.3.3 SMTP工作过程

    SMTP是一种基于文本的电子邮件传输协议,是用于邮件服务器之间交换邮件的协议。SMTP是应用层的服务,可以适应于各种网络系统。

    SMTP的命令和响应都是基于文本,以命令行为单位,换行符为CR/LF。响应信息一般只有一行。

    SMTP要经过建立连接、传送邮件和释放连接3个阶段。具体为:

    1. 建立TCP连接。
    2. 客户端向服务器发送HELO命令以标识发件人自己的身份,然后客户端发送MAIL命令。
    3. 服务器端以OK作为响应,表示准备接收。
    4. 客户端发送RCPT命令。
    5. 服务器端表示是否愿意为收件人接收邮件。
    6. 协商结束,发送邮件,用命令DATA发送输入内容。
    7. 结束此次发送,用QUIT命令退出。

    SMTP服务器基于DNS中的邮件交换(MX)记录路由电子邮件。电子邮件系统发邮件时是根据收信人的地址后缀来定位邮件服务器的。SMTP通过用户代理程序(UA)完成邮件的编辑、收取和阅读等功能。通过邮件传输代理程序(MTA)将邮件传送到目的地。

    33.3.4 SMTP通讯举例

    在发送方(客户端)和接收方(服务器)间创建连接之后,接下来是一个合法的SMTP会话。在下面的对话中,所有客户端发送的都以“C:”作为前缀,所有服务器发送的都以“S:”作为前缀。在多数计算机系统上,可以在发送的机器上使用telnet命令来创建连接,比如:

    telnet www.example.com 25

    通过这个命令,打开计算机到主机www.example.com的SMTP连接。

    S: 220 www.example.com ESMTP Postfix
    
    C: HELO mydomain.com
    
    S: 250 Hello mydomain.com
    
    C: MAIL FROM: <sender@mydomain.com>
    
    S: 250 Ok
    
    C: RCPT TO: <friend@example.com>
    
    S: 250 Ok
    
    C: DATA
    
    S: 354 End data with <CR><LF>.<CR><LF>
    
    C: Subject: test message
    
    C: From:""< sender@mydomain.com>
    
    C: To:""< friend@example.com>
    
    C:
    
    C: Hello,
    
    C: This is a test.
    
    C: Goodbye.
    
    C: .
    
    S: 250 Ok: queued as 12345
    
    C: quit
    
    S: 221 Bye

    虽然是可选的,但几乎所有的客户端都会使用EHLO问候消息(而不是上面所示的HELO)来询问服务器支持何种SMTP扩展,邮件的内容一般是典型的MIME格式。

    33.3.5 垃圾邮件

    最初,SMTP的局限之一在于它没有对发送方进行身份验证的机制。因此,后来定义了SMTP-AUTH扩展。

    尽管有了身份认证机制,垃圾邮件仍然是一个主要的问题。但由于庞大的SMTP安装数量,大刀阔斧地修改或完全替代SMTP被认为是不现实的。Internet Mail 2000就是一个替代SMTP的建议方案。

    因此,出现了一些同SMTP工作的辅助协议。IRTF的反垃圾邮件研究小组正在研究一些建议方案,以提供简单、灵活、轻量级的、可升级的源端认证。最有可能被接受的建议方案是发送方策略框架协议。

    33.4 总结

    本章节就为大家讲解这么多,更多SMTP协议的相关知识需要大家查阅相关书籍进行学习,或者网上搜索相关资料进行学习。

  • 相关阅读:
    [转]Java 的强引用、弱引用、软引用、虚引用
    无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET
    [转]理解水平扩展和垂直扩展
    Uva 12299 带循环移动的RMQ(线段树)
    Codeforces 758D Ability To Convert(区间DP)
    Codeforces 758C Unfair Poll
    Codeforces 758B Blown Garland
    Codeforces 758A Holiday Of Equality
    LA 3938 动态最大连续和
    Uva 11235 RMQ问题
  • 原文地址:https://www.cnblogs.com/armfly/p/9584839.html
Copyright © 2011-2022 走看看