`
jimmy.shine
  • 浏览: 392938 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SMTP服务扩展

    博客分类:
  • Mail
阅读更多
SMTP提供一种可靠的有效的传送机制,它用于传送电子邮件。虽然十几年来,它的作用已经有目共睹,可是对它功能的扩充也是必不可少的。对SMTP服务的扩展我们介绍一下:在SMTP转发的邮件中包括信封和内容这两种东西。我们写信也写信封和信皮,我们可以借生活中的信件来帮助理解。
(1)SMTP信封比较容易理解,它被作为一系列的SMTP协议单元传送,它包括发送者地址,传送模式,还有一个或多个接收者地址。如果有不清楚的地方,请参阅《SMTP协议标准》。
(2)至于内容,它是由两部分组成的,一部分是信头,一部分是信体,信头是由一个个的域/值对(一个域,一个值)组成的,如果信体有结构的话,它的结构是以MIME构造的。内容从根本上来说是文本的,一般也是由ASCII码构成的,但是由于使用了MIME,所以这个限制应该也是没有了,但信头却不行,一般都应该使用ASCII码表示。虽然SMTP协议是一个不错的协议,可是对它的扩展还是不可避免,本文主要说明了一种扩展方法,使用这种扩展方法,服务器和用户之间可以相互知道对方使用了扩展,使用了多少,如果进行通信。
  这里我们希望让大家知道网络协议中的一个经验:参数越多,死得越快;参数越少,越能持久。参数太多了,根本不利于使用,无法推广,早晚会被别的协议取代。这也符合科学的基础原理,简单。这说明在实现时一定要小心,如果不小心会便得到的远远小于付出的,有时根本不能提供任何益处。
  下面我们看一下EHLO命令,支持SMTP服务扩展的客户应该以EHLO命令开始SMTP会话,而不是通常的HELO命令。如果服务器也支持,那就返回确认响应,如果不支持就返回失败响应。因为引入了EHLO命令,因此会话开始的第一条命令可以是HELO或EHLO。
  因此引入了新的参数,所以SMTP的MAILFROM和RCPTTO命令行长度也能再是512字节了,但是引入新参数的长度必须加以说明,以便实现者准备缓冲区。
命令格式如下:
ehlo-cmd::="EHLO"SPdomainCRLF
  在命令成功是,服务器返回代码250,如果失败返回代码550,如果出错,返500,501,502,504或421。对比《SMTP协议标准》,EHLO命令可以出现在任何HELO命令出现的地方,在成功发送一个HELO或EHLO命令后再次发送它会使服务器返回503。客户这时不能缓存服务器返回的任何信息。这里一定要注意的是,每次开始SMTP扩展服务会话的时候必须发送EHLO命令。如果服务器能够处理EHLO命令,它会返回代码250。这样,服务器和客户就处于初始状态了,也就是说,所有的状态表和缓冲区已经准备完毕。通常这种响应是多行的,每行响应包括一个关键字,如果有的话,还有一个或多个参数,响应的语法如下:
ehlo-ok-rsp::="250"domain[SPgreeting]CRLF
/("250-"domain[SPgreeting]CRLF
*("250-"ehlo-lineCRLF)
"250"SPehlo-lineCRLF)
greeting::=1*<除了CR或LF的所有字符>
ehlo-line::=ehlo-keyword*(SPehlo-param)
ehlo-keyword::=(字母/数字)*(字母/数字/"-")
ehlo-param::=1*<随了空格和控制字符外的字符>
ALPHA::=<大写A到Z,小写A到Z>
DIGIT::=<0到9>
CR::=<回车,ASCII码13>
LF::=<换行,ASCII码10>
SP::=<空格,ASCII码32>
 
  虽然EHLO关键字可以是大写,小写,大小写混合的,但是对它的处理是大小写敏感的,这是与原来规定不同的。IANA支持SMTP服务扩展注册,相对于每个扩展都有一个相应的EHLO关键字值,每个在IANA注册的服务扩展必须在一个RFC中定义。如果一个关键字以X开头,它指的是这个服务扩展是双方约定的,不是标准的。
  如果出于某种原因,服务器不能列出它所支持的服务扩展,就返回代码554。在接收到这个代码后,客户要么发送HELO,要么发送QUIT命令。有时候服务器接收到EHLO命令,可是命令参数不可接受,它就返回代码501。如果服务器识别了EHLO,但对服务器扩展未实现,则返回代码502。
  如果服务器不再提供服务扩展,则返回代码421。在接收到这个代码后,客户要么发送HELO,要么发送QUIT命令。如果服务器不支持服务扩展,则返回500,服务器保持现有状态,在接收到这个代码后,客户要么发送HELO,要么发送QUIT命令。
  有时候,SMTP服务器会在接收到EHLO命令后因为某种原因关闭连接,这种情况在原来的SMTP协议标准中未涉及。为了处理这种情况,客户必须能够确认服务器是否能够工作,它可以重新连接并发送HELO或EHLO命令。有些服务器在接收到一个EHLO命令后会拒绝接收新的HELO命令,这时可以利用RSET命令重新启动,然后再发送HELO。如果客户不注意这样的小细节,会收到失败代码。
  下面我们来看一下MAILFROM和RCPTTO参数。许多服务扩展是在MAILFROM和RCPTTO命令后加入一些参数来实现的。下面我们看一下这两个命令的格式:
 
esmtp-cmd::=inner-esmtp-cmd[SPesmtp-parameters]CRLF
esmtp-parameters::=esmtp-parameter*(SPesmtp-parameter)
esmtp-parameter::=esmtp-keyword["="esmtp-value]
esmtp-keyword::=(字母/数字)*(字母/数字/"-")
esmtp-value::=1*<除了空格,"="和控制字符的所有字符>
inner-esmtp-cmd::=("MAILFROM:"返回路径)/("RCPTTO:"转发路径)
  如果服务器不能识别或实现一个或多个MAILFROM或RCPTTO参数,它应该返回代码555。如果这种情况只是暂时的,服务器返回代码455。其它返回代码请查阅相关资料,这里不再详述了。服务器以服务扩展处理时,它处理的任何信息都应该在包头上加上“服务扩展标记”以示区别。
下面是一个例子:
(1)双方交互:S是服务器,C是客户。
S:<等待连接在TCP端口25>
C:<连接到服务器>
S:220dbc.mtview.ca.usSMTPserviceready
C:EHLOymir.claremont.edu
S:250dbc.mtview.ca.ussayshello
...
(2)下面也是一个例子:
S:<等待连接在TCP端口25>
C:<连接到服务器>
S:220dbc.mtview.ca.usSMTPserviceready
C:EHLOymir.claremont.edu
S:250-dbc.mtview.ca.ussayshello
S:250-EXPN
S:250-HELP
S:250-8BITMIME
S:250-XONE
S:250XVRB
...
 
  这说明服务器实现了服务扩展EXPN和HELP,这两个是标准的服务扩展,另外两个以X开头的是非标准的。 
(3)最后,我们来看看服务器不支持服务扩展时的情况:
S:<等待连接在TCP端口25>
C:<连接到服务器>
S:220dbc.mtview.ca.usSMTPserviceready
C:EHLOymir.claremont.edu
S:500Commandnotrecognized:EHLO
...
代码500表示服务器不支持服务扩展。
分享到:
评论

相关推荐

    外文文献中英文翻译-SMTP服务扩展的认证机制

    本文档详细定义了一个SMTP服务扩展,该扩展允许SMTP客户端向服务器表明其认证机制,并进行认证协议交换。此扩展基于Simple Authentication and Security Layer (SASL),旨在提供更安全、更灵活的身份验证方法。 1. ...

    SMTP服务扩展毕业论文 开题报告 外文翻译

    在SMTP服务扩展毕业论文的主题中,我们可能会深入探讨如何通过扩展SMTP服务来增强其功能和安全性,特别是涉及认证机制的部分。 开题报告通常包括对研究背景的阐述、问题的重要性、目标设定、研究方法以及预期成果等...

    RFC2554中文版(SMTP服务认证扩展)

    2. **EHLO关键字**:与该扩展服务相关的EHLO(Extended HELLO)关键字是“AUTH”。当客户端连接到SMTP服务器时,可以通过EHLO命令来查询服务器是否支持认证服务。 3. **AUTH参数**:AUTH命令参数是SASL机制支持的一...

    一个SMTP服务器实现程序

    EHLO是扩展版本,支持更多的SMTP服务扩展。 3. **身份验证**:如果SMTP服务器需要验证,客户端将发送用户名和密码,这通常通过AUTH命令完成,如使用PLAIN、LOGIN或CRAM-MD5等认证机制。 4. **邮件构造**:MFC的 ...

    SMTP Service Extension for Authentication

    在SMTP Service Extension for Authentication中,这个服务扩展定义了客户端如何向服务器表明所使用的身份验证机制,并进行身份验证协议交换,甚至可选地协商后续协议交互的安全层。该扩展是对简单认证和安全层...

    SMTP外文翻译中英文

    SMTP服务扩展对于身份验证(SMTP Service Extension for Authentication)是SMTP协议的一个重要增强,它定义了SMTP客户端如何向服务器表明其身份验证机制,并执行身份验证协议交换。这个扩展是简单认证和安全层...

    SMTP Service Extension (SMTP服务认证拓展)

    为此,互联网工程任务组(IETF)制定了一系列标准来增强SMTP的安全性,其中之一就是SMTP服务认证扩展(SMTP Service Extension for Authentication)。该扩展允许SMTP客户端向服务器表明其认证机制,并执行认证协议...

    Liunx 连接不上SMTP服务器解决方案

    此外,还要注意PHP的openssl扩展是否启用,因为许多SMTP服务器要求使用SSL或TLS加密连接。运行`php -m`检查openssl是否在已加载的模块中。如果不是,需要在php.ini中取消注释`extension=openssl.so`(或者根据你的...

    SMTPTool 1.7┊可以用来调试SMTP服务器直接与SMTP服务器互动┊英文绿色免费版

    5. **兼容性广泛**:由于SMTP是标准的邮件传输协议,SMTPTool适用于大多数SMTP服务器,无论是企业内部的邮件服务器还是公共的SMTP服务提供商。 6. **便捷操作**:对于那些不熟悉SMTP协议的用户,SMTPTool的界面直观...

    外文文献综述

    根据给定的文件信息,我们可以深入探讨外文文献在毕业设计中的重要性以及文献综述的撰写技巧,同时,从部分文件内容中提取出关于SMTP服务扩展(特别是身份验证)的关键知识点。 ### 外文文献在毕业设计中的作用 ...

    smtp邮箱服务器相关调查

    10. **SMTP协议扩展**:除了基本的SMTP协议,还有一些扩展如ESMTP(Extended SMTP)和EWS(Exchange Web Services)等,它们增加了更多功能,如更大的邮件大小限制、文件附件支持等。 综上所述,SMTP邮箱服务器的...

    简易的smtp服务器与客户端的C代码

    请注意,这仅是一个简单的实现,可能不包含所有SMTP功能,如扩展、多部分消息体或复杂的身份验证机制。在实际应用中,你需要考虑更多的边缘情况和安全性问题。但是,这个项目提供了一个很好的起点,帮助你逐步了解并...

    RFC2554_SMTP服务认证扩展

    本文档定义扩展邮件服务,一个SMTP(简单邮件传输协议)的客户端和服务器之间可以存在一种认证机制,执行认证协议的交互,并为以后的邮件协议交互进行安全层次的协商。

    读取自己本smtp服务器的邮件Mail

    在IT行业中,电子邮件系统是企业通信的核心组成部分,而SMTP(Simple Mail Transfer Protocol)协议则是电子邮件传输的标准。...在实际开发中,还需要考虑错误处理、性能优化、安全性和可扩展性等因素。

    Go-smtp-SMTP服务器协议状态机

    在实际应用中,Go-smtp服务器不仅限于基础的SMTP功能,还可能支持扩展如STARTTLS(在连接后启用TLS加密)、AUTH(身份验证)等,以满足更复杂的安全需求。此外,对于大型邮件系统,还需要考虑并发处理、邮件队列管理...

    smtp.tar.gz_C 邮件发送_SMTP服务器_smtp_smtp c_smtp协议

    2. 握手:客户端向服务器发送"HELO"或"EHLO"命令,表明身份并告知服务器支持的扩展功能。 3. 授权:如果服务器需要身份验证,客户端会提供用户名和密码。 4. 发送邮件:客户端使用"MAIL FROM:"命令指定发件人地址,...

    java中利用smtp服务器发送邮件实例

    在Java编程中,利用SMTP(Simple Mail Transfer Protocol)服务器发送邮件是一项常见的任务,尤其是在系统集成、通知服务或者自动化脚本中。SMTP是互联网标准,用于发送电子邮件。下面将详细讲解如何在Java中实现这...

    update_smtp1_src.zip_SMTP服务器_邮件服务器

    邮件服务器则负责存储和管理用户的邮件,它可以同时支持SMTP服务和POP3或IMAP服务,用于接收和检索邮件。POP3(Post Office Protocol version 3)允许用户下载邮件到本地设备,而IMAP(Internet Message Access ...

Global site tag (gtag.js) - Google Analytics