邮件协议浅析 - 网络开发 - 驿媒

(这条文章已经被阅读了 106 次) 时间:2000-08-30 12:07:34 来源:驿媒 (驿媒特使) 原创-IT

简介:本文就SMTP协议内容及其实现做了介绍,并就其扩展的功能进行了描述。通过邮件列表等程序例子,希望能对读者在TCP/IP基础上的通信软件开发工作有一定的帮助。

1·概述
  简单邮件传输(SMTP)的目标是为安全、高效地传送邮件。
SMTP是不受约束的独立传输子系统,仅需一可靠的有序数据传输信道。
SMTP一非常重要的特性是具有通过传输服务环境转递邮件的功能。传输服务提供一内部处理通讯环境(IPCE)。IPCE可以覆盖整个网络甚至几个网络,或者网络的某个子网。重要的是要认识到传输系统(或IPCEs)并不是简单的一对一网络。过程之间可以通过任意已知的相互IPCE直接通讯。邮件就是内部处理通讯的一种应用或使用形式,是通过一过程连接到两个(或更多)IPCEs进行转递的方式,邮件可被在不同IPCEs的过程下传送。更多特定的情况是邮件能利用不同传输系统下的主机,在不同的传输系统主机之间分程转递。

2.SMTP模型
SMTP是基于下面的通讯模型基础上设计的:作为用户邮寄请求的结果,发送端-SMTP建立了一双通信信道给接收者-SMTP,接收端-SMTP既可以是一个最终的终端也可以是一中继器。发送端-SMTP生成SMTP命令并下达指示给接收端-SMTP。作为对此命令的响应,接收者需向发送者发送SMTP回复。
一旦建立通信信道,发送端-SMTP就发出MAIL命令并显示该邮件的发送者。如果接收端-SMTP能够接受此邮件则回复OK,发送端-SMTP再发出RCPT命令来识别邮件的接收者。如果接收端-SMTP同意并能够接受该邮件则应答OK回复;否则,系统则回复拒绝此接受者。(并不是整个邮件传输)。发送端-SMTP和接收端-SMTP可协商多个接受者。当接受者被确定,发送端-SMTP发出邮件数据并以特定顺序为终结。如果接收端-SMTP成功处理了邮件数据,则以回复OK应答。对话立即结束,一次只进行一个传输。
————————————————————-
+———-+ +———-+
+——+ | | | |
| 用户 |<-->| | SMTP | |
+——+ | 发送端- | 命令/回复 接收端-|
+——+ | SMTP |<-------------->| SMTP | +——+
| 文件 |<-->| | 邮件 | |<-->| 文件 |
|系统 | | | | | | 系统 |
+——+ +———-+ +———-+ +——+
发送端-SMTP 接收端-SMTP
SMTP 应用模型
图 1
————————————————————-
SMTP为邮件传输提供的架构:当两个主机连接在同一传输服务上时,可直接从发送用户的主机到接收用户的主机;当源极与信宿主机没有连到同一传输服务上时,可通过一个或多个中继器。为具有中转能力,服务器-SMTP必须配置有与终端邮箱一样的终端主机的名字。
MAIL命令语句的返回路径用以标识谁发来的邮件。RCPT命令语句的转寄路径是用来标识邮件发给谁。转寄路径是源路线,返回路径是一回来路线(用来当分程转递信息发生错误时向发送者返回信息的)当同一信息被传送给多个接受者时,SMTP允许传输一个备份数据给同一终端主机上的所有接收者。
3.SMTP程序
SMTP是一个非常简单的协议,按照字面的意思就可完成操作。可使用telent登录到远程主机25号端口,然后使用SMTP命令在命令行键入邮件。有时我们使用这种方法来测试远程系统的SMTP服务器,还可以用它来方便地演示邮件在两个系统之间的传递过程。例子:
%telnet mail.cppx.com 25
Trying 128.66.12.1…
Connected to almond.nuts.com.
Escape charater is ‘^]’.
220 almond Sendmail 4.1/1.41 ready at Tue,29 Mar 94 17:21:26 EST
helo peanut.nurs.com
250 almond Hello peanut.nuts.com,pleased to meet you
mail from:[email protected]
250 …Sender ok
rcpt to:
250 …Recipient ok
data
354 Enter mail,end with ”.” on a line by itself
Hi,Tyler
.
250 Mail accepted
quit
221 almond delivering mail
Connection closed by foreign host
从这个例子可以发现,这个协议竟然如此简单,因而也就不会对电子邮件的配置感到恐惧了。具体步骤是:打开一个TCP连接,发送方进行自我确认;提供发信源地址(From)和目的地地址(TO);要发送的信息以DATA命令开始,以仅包含一个句号(。)的一行结束;最后以一个QUIT命令终止绘话过程。这个例子很简单,而且也仅使用了不多的几条命令。
对上面提供的例子,我做了验证,没有成功。无法登录到almond.nuts.com。
在RFC821还定义了其它的命令(SEND,SOML,SAML TURN),这些命令是可选的,而且还没有得到广泛的应用,即使是那些已被采用的命令也还没有得到普遍的使用。HELP,VRFY和EXPN这些命令更适合于交互使用而不是由SMTP来进行正常的机器对机器的交互操作。下面是从SMTP会话进程摘录的,从中可看出这些命令的使用方法。
HELP
214-command
214-HELO MAIL RCPT DATA ESET
214-NOOP QUIT HELP VRFY EXPN
214-For more info use “HELP”.
214-For local information contact postmaster at this site
214-end of HELP info
HELP REST
214-REST
Resets the system
214End of HELP info
VRFY
[email protected]
VRFY
250 kathy McCafferty<
>
EXPN
[email protected]
250 David Craig<>
[email protected]
HELP命令用于显示此系统所使用的命令。HELP REST则是具体显示REST命令的有关信息。坦率地说,这种帮助系统并不能起到多大的帮助作用。VRFY和EXPN命令比较有用,但是由于安全方面的原因他们往往被禁止使用,因为它们能够提供有关用户帐户方面的信息,这些信息有可能被网络入侵者利用。EXPN命令要求显示出此系统提供的,位于邮件列表admin中的电子函件地址列表。VRFY命令显示一则而不是整个邮件列表的信息,在VRFY中,mac 是一个本地用户的帐户,这条命令将会返回有关这个用户的帐户信息。在VRFY命令中,jane是/etc/aliases文件的一个别名,此命令的返回值是在哪个文件中找到的jane电子函件地址。HELP,VRFY 和EXPN虽然有趣,但却很少使用,SMTP是靠其它命令来完成其工作的。
SMTP提供提供了端到端的邮件直接传递,但这很少使用。大多数邮件系统都使用象UUCP和X.400这样的store and forward(存储转发)协议,将邮件一级一级地向目的地传送,在每一级都存储完整的信息,然后再转发到下一级直到到达目的地为止。
…………..(代续)

(大家有兴趣吗??欢迎给我意见)