`
jimmy.shine
  • 浏览: 388808 次
  • 性别: 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服务扩展的认证机制

    这个文档详细说明了因特网团体的一个标准的协议的发展,以及对其改进和建议提出了要求。说到这,为了标准化这个协议的状态和地位,就必须提及目前最新的“Internet 官方协议的标准”(STD1)。发送这个文档是不受限制...

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

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

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

    RFC2554中文文档。SMTP服务认证扩展

    RFC2554_SMTP服务认证扩展

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

    中文版RFC,共456

    RFC1426 SMTP服务扩展用于8bit-多用途网际邮件扩充协议(MIME)传输 RFC1428 Internet邮件从Just-Send-8到8bit-SMTPMIME的转换 RFC1433 直接ARP RFC1445 简单网络管理协议(SNMPv2)版本 2的管理模式 RFC1454 下一代IP...

    RFC中文文档-txt

    RFC1426 SMTP服务扩展用于8bit-多用途网际邮件扩充协议(MIME)传输 RFC1428 Internet邮件从Just-Send-8到8bit-SMTPMIME的转换 RFC1433 直接ARP RFC1445 简单网络管理协议(SNMPv2)版本 2的管理模式 RFC1454 下一代IP...

    rfc中文文档目录,包含部分翻译

    RFC1426_SMTP服务扩展用于8bit-多用途网际邮件扩充协议(MIME)传输 RFC1428_Internet邮件从Just-Send-8到8bit-SMTPMIME的转换 RFC1433 直接ARP RFC1445_简单网络管理协议(SNMPv2)版本 2的管理模式 RFC1454_下一代IP...

    gen_smtp:可扩展的Erlang SMTP客户端和服务器库

    提供通用的Erlang SMTP服务器框架,可以通过OTP样式的回调模块进行扩展。 还包括一个纯Erlang SMTP客户端。 目的是使在Erlang中收发电子邮件变得容易,而又省却POP / IMAP的麻烦。 这不是一个完整的邮件服务器-尽管...

    中文RFC文档.zip

    RFC1426 SMTP服务扩展用于8bit-多用途网际邮件扩充协议(MIME)传输 RFC1428 Internet邮件从Just-Send-8到8bit-SMTPMIME的转换 RFC1433 直接ARP RFC1445 简单网络管理协议(SNMPv2)版本 2的管理模式 RFC1454 下一代IP...

    SmtpServer:用C#编写的SMTP服务器组件

    SmtpServer当前支持以下ESMTP扩展: STARTTLS 尺寸管道8位MIME AUTH PLAIN登录如何使用? 从最基本的角度来看,服务器只需要花费几行代码即可侦听传入的请求。 var options = new SmtpServerOptionsBuilder () . ...

    中国移动MMS规范.rar

    10.5.2 SMTP服务扩展 48 11 MM6接口定义 48 12 MM7接口定义 48 12.1 提交增殖业务的多媒体消息 49 12.1.1 正常操作 49 12.1.2 异常操作 49 12.1.4 信息单元 51 12.2 传送请求 52 12.2.1 正常操作 52 12.2.2 异常操作...

    PHP邮件发送类SMTP

    它支持安全连接 使用SSL或TLS的后开始建立连接,连接超时,验证使用PHP SASL级(普通,登录,强加的MD5验证) ,提供的POP3面前的SMTP认证,并充分利用了扩展的SMTP流水线缓冲区SMTP命令,提供更快排队的邮件时,...

    Go-一个用Go语言实现的SMTP服务器

    非常简单、自动SPF检查、支持TLS、模块化,因为您可以添加更多smtp命令处理器以根据需要扩展功能

    C语言socket/smtp发送邮件,支持附件,支持windows和linux

    * 邮件内容和主题可以是空,但当有附件时,主题取第一个附件的文件名(不含扩展名) * 密码验证均为base64加密 * 邮件正文和附件的数据传送方式,均为base64 * 自动解析发件箱的SMTP服务器 */ 支持windows系统,...

    tmail:Golang SMTP服务器

    邮件 tmail是SMTP服务器 产品特点 SMTP,基于SSL的SMTP,ESMTP(大小,AUTH PLAIN,STARTTLS) 外发邮件的高级路由(路由的故障转移和... 通过插件完全可扩展 易于部署 没有依赖项:-&gt;您不必安装或维护库 可聚类(待

    magento-smtp-relay:简单的 Magento 扩展,可通过自定义 SMTP 服务器发送所有交易电子邮件

    简单的 Magento 扩展,通过自定义 SMTP 服务器发送所有交易电子邮件。 特征: 使用任何第 3 方 SMTP 服务器发送所有交易电子邮件 添加自定义标题 多部分支持,包括 HTML 电子邮件的文本版本,以提高您最重要的电子...

    计算机软件-商业源码-实现网络 SMTP 协议的 MFC 扩展.zip

    计算机软件-商业源码-实现网络 SMTP 协议的 MFC 扩展.zip

    一个为Go项目实现SMTP服务器的小程序包-Golang开发

    非常简单的自动SPF检查,通过Request.Mailable支持TLS Modular进行的自动FROM验证(MX检查),因为您可以添加更多的smtp命令处理器以根据需要扩展功能。去获取github.com/alash3al/go-smtpsrv包主要导入(“ fmt”...

    Node.js写的SMTP服务器Haraka.zip

    Haraka 是一个Node.js 写的 SMTP 服务器,使用插件架构实现了大部分功能。使用了高度可扩展的事件模型,能处理几千个并发连接,插件也都是使用Node.js写成的,性能很好。安装:npm install -g Haraka创建服务:...

    Windows下纯C语言Socket、smtp发送邮件,支持附件

    2、邮件内容和主题可以是空,但当有附件时,主题取第一个附件的文件名(不含扩展名) 3、密码验证均为base64加密 4、邮件正文和附件的数据传送方式,均为base64 5、自动解析发件箱的SMTP服务器 压缩包文件简介: ...

Global site tag (gtag.js) - Google Analytics