smpt服务器的问题,第1张

一、协议简介

SMTP被用来在因特网上传递电子邮件。文件RFC821规定了该协议的所有细节。但是你只须记住下面的内容--该协议的基本命令和方法就行了。

协议的原理很简单。无非是一个客户端计算机向服务器发送命令,然后服务器向客户端计算机返回一些信息。客房端发送的命令以及服务器的回应都是字符串,你并不需要特别的软件就能读出它们。如果你仔细看过WinsockTerminal示例程序的源代码,你就会发现这一点。现在让我们用这个示例程序来向自己发一封电子邮件吧。

运行示例程序,单击"Connect"按钮,在"Connectto"对话框中输入你的电子邮件服务器的地址,选择SMTP选项。最后按"Connect"按钮。如果连接成功,Winsock控件会产生Connected事件,在状态栏中也可看到连接成功的信息。在主文本窗口中你将看到从服务器返回的文本。该文本包含一个三位数的代码及描述,例如:

220-nscinforuSendmail8612/869readyatWed,22Apr199822:54:41+0300

220ESMTPspokenhere

不必太过留意这些描述。因为这些描述可能会因服务器而异。你只须要知道代码所代表的意思就行了。代码220表示成功建立连接,服务器等待你的第一个命令。

向服务器传递的第一个命令是HELO该命令包含一个参数,即你的邮箱名。

HELOoleg

注意:在RFC821中,HELO是一个可选择性命令,如果服务器不要求该命令的话,你可以把它忽略掉。

如果命令成功,服务器会返回一个代码为250的回应。下一步用MAILFROM命令告诉服务器你想发一封邮件。该命令以发信人的邮件地址为参数。

MAILFROM : [email]oleg@vbipcom[/email]

发完命令后,如果服务器返回一个代码为250回应,你就可以向服务器发送RCPTTO命令了。该命令以收信人地址为参数,一看便知是告诉服务器你想将邮件发到收信人地址处。

RCPTTO : [email]somebody@domaincom[/email]

如果你想将邮件发给多个收件人的话。你需要多次使用RCPTTO命令,对每个命令,服务器都会返回代码为250的回应。

现在你可以向服务器发送邮件正文了。用DATA命令告诉服务器以下的内容为邮件正文。在你从服务器收到代码为354的回应后,你就可以发送邮件正文了。邮件按行发送,每行邮件以一个无回车的换行符结束(在VB中就是vbLf)示例程序知道何时使用换行符,何时使用回车加换行符。所以你只须按回车键就行了。下面是一个例子:

Subject : Myfirste-mailmessage

Firstlineofamessage

Secondline

注意上面最后一行的最后一个字符是一个小数点。这是正文结束的标志。用VB代码表示就是vbLf&""&vbCrLf服务器收到这个标志后,就会立即向你返回一个代码为250的回应以及该邮件的唯一ID号。

250WAA10568Messageacceptedfordelivery

任务完成了,你可以继续发送下封邮件,也可以断开同服务器的连接。如果要断开同服务器的连接就用QUIT命令。在这种情况下,服务器会返回一个代码为221的回应并断开连接。

二、SMTP协议原始命令码和工作原理

1SMTP是工作在两种情况下:一是电子邮件从客户机传输到服务器;二是从某一个服务器传输到另一个

服务器

2SMTP是个请求/响应协议,命令和响应都是基于ASCII文本,并以CR和LF符结束。响应包括一个表示返

回状态的三位数字代码

3SMTP在TCP协议25号端口监听连接请求

4连接和发送过程:

a建立TCP连接

b客户端发送HELO命令以标识发件人自己的身份,然后客户端发送MAIL命令

服务器端正希望以OK作为响应,表明准备接收

c客户端发送RCPT命令,以标识该电子邮件的计划接收人,可以有多个RCPT行

服务器端则表示是否愿意为收件人接受邮件

d协商结束,发送邮件,用命令DATA发送

e 以表示结束输入内容一起发送出去

f结束此次发送,用QUIT命令退出。

5另外两个命令:

VRFY---用于验证给定的用户邮箱是否存在,以及接收关于该用户的详细信息。

EXPN---用于扩充邮件列表。

6邮件路由过程:

SMTP服务器基于‘域名服务DNS中计划收件人的域名来路由电子邮件。SMTP服务器基于DNS中的MX记录

来路由电子邮件,MX记录注册了域名和相关的SMTP中继主机,属于该域的电子邮件都应向该主机发送。

若SMTP服务器mailabccom收到一封信要发到[email]shuser@shabccom[/email]:

aSendmail请求DNS给出主机shabccom的CNAME记录,如有,假若CNAME到shmailabccom,则再次

请求shmailabccom的CNAME记录,直到没有为止

b假定被CNAME到shmailabccom,然后sendmail请求@abccom域的DNS给出shmailabccom的MX记录,

shmail MX 5 shmailabccom

10 shmail2abccom

c Sendmail最后请求DNS给出shmailabccom的A记录,即IP地址,若返回值为1234

d Sendmail与1234连接,传送这封给[email]shuser@shabccom[/email]的信到1234这台服务器的SMTP后台程序

7SMTP基本命令集:

命令 描述

------------------------------

HELO 向服务器标识用户身份

发送者能欺骗,说谎,但一般情况下服务器都能检测到。

MAIL 初始化邮件传输

mail from:

RCPT 标识单个的邮件接收人;常在MAIL命令后面

可有多个rcpt to:

DATA 在单个或多个RCPT命令后,表示所有的邮件接收人已标识,并初始化数据传输,以结束。

VRFY 用于验证指定的用户/邮箱是否存在;由于安全方面的原因,服务器常禁止此命令

EXPN 验证给定的邮箱列表是否存在,扩充邮箱列表,也常被禁用

HELP 查询服务器支持什么命令

NOOP 无操作,服务器应响应OK

QUIT 结束会话

RSET 重置会话,当前传输被取消

--------------------------------

8 MAIL FROM命令中指定的地址是称作 envelope from地址,不需要和发送者自己的地址是一致的。

RCPT TO 与之等同,指明的接收者地址称为envelope to地址,而与实际的to:行是什么无关。

9为什么没有RCPT CC和RCPT BCC:

所有的接收者协商都通过RCPT TO命令来实现,如果是BCC,则协商发送后在对方接收时被删掉信封接收者

10邮件被分为信封部分,信头部分和信体部分

envelope from, envelope to 与message from:, message to:完全不相干。

evnelope是由服务器主机间SMTP后台提供的,而message from/to是由用户提供的。有无冒号也是区别。

11 怎样由信封部分检查是否一封信是否是伪造的?

a received行的关联性。

现在的SMTP邮件传输系统,在信封部分除了两端的内部主机处理的之个,考虑两个公司防火墙之间

的部分,若两台防火墙机器分别为A和B,但接收者检查信封received:行时发现经过了C则是伪造的。

b received :行中的主机和IP地址对是否对应如:

Receibed : from galangalorg (turmericcom [10412823115] by mail bieberdorfedu

c 被人手动添加在最后面的received行:

Received : from galangalorg ([10412823115]) by mail bieberdorfedu (885)

Received : from lemongrassorg by galangalorg (873)

Received : from grapraocom by lemongrassorg (864)

三、SMTP协议通讯模型

SMTP协议是TCP/IP协议族中的一员,主要对如何将电子邮件从发送方地址传送到接收方地址,也即是对传输的规则做了规定。SMTP协议的通信模型并不复杂,主要工作集中在发送SMTP和接收SMTP上:首先针对用户发出的邮件请求,由发送SMTP建立一条连接到接收SMTP的双工通讯链路,这里的接收SMTP是相对于发送SMTP而言的,实际上它既可以是最终的接收者也可以是中间传送者。发送SMTP负责向接收SMTP发送SMTP命令,而接收SMTP则负责接收并反馈应答。可大致用下面的通讯模型示意图来表示:

[attach]483[/attach]

四、SMTP协议的命令和应答

从前面的通讯模型可以看出SMTP协议在发送SMTP和接收SMTP之间的会话是靠发送SMTP的SMTP命令和接收SMTP反馈的应答来完成的。在通讯链路建立后,发送SMTP发送MAIL命令指令邮件发送者,若接收SMTP此时可以接收邮件则作出OK的应答,然后发送SMTP继续发出RCPT命令以确认邮件是否收到,如果接收到就作出OK的应答,否则就发出拒绝接收应答,但这并不会对整个邮件操作造成影响。双方如此反复多次,直至邮件处理完毕。SMTP协议共包含10个SMTP命令,列表如下:

SMTP命令命令说明

HELLO<domain><CRLF>识别发送方到接收SMTP的一个HELLO命令

MAILFROM :<reverse-path><CRLF><reverse-path>为发送者地址。此命令告诉接收方一个新邮件发送的开始,并对所有的状态和缓冲区进行初始化。此命令开始一个邮件传输处理,最终完成将邮件数据传送到一个或多个邮箱中。

RCPTTO :<forward-path><CRLF><forward-path>标识各个邮件接收者的地址

DATA<CRLF>

接收SMTP将把其后的行为看作邮件数据去处理,以<CRLF><CRLF>标识数据的结尾。

REST<CRLF>退出/复位当前的邮件传输

NOOP<CRLF>要求接收SMTP仅做OK应答。(用于测试)

QUIT<CRLF>要求接收SMTP返回一个OK应答并关闭传输。

VRFY<string><CRLF>验证指定的邮箱是否存在,由于安全因素,服务器多禁止此命令。

EXPN<string><CRLF>验证给定的邮箱列表是否存在,扩充邮箱列表,也常禁止使用。

HELP<CRLF>查询服务器支持什么命令

注:<CRLF>为回车、换行,ASCII码分别为13、10(十进制)。

SMTP协议的每一个命令都会返回一个应答码,应答码的每一个数字都是有特定含义的,如第一位数字为2时表示命令成功;为5表失败;3表没有完成。一些较复杂的邮件程序利用该特点,首先检查应答码的首数字,并根据其值来决定下一步的动作。下面将SMTP的应答码列表如下:

应答码说明

501参数格式错误

502命令不可实现

503错误的命令序列

504命令参数不可实现

211系统状态或系统帮助响应

214帮助信息

220<domain>服务就绪

221<domain>服务关闭

421<domain>服务未就绪,关闭传输信道

250要求的邮件操作完成

251用户非本地,将转发向<forward-path>

450要求的邮件操作未完成,邮箱不可用

550要求的邮件操作未完成,邮箱不可用

451放弃要求的操作;处理过程中出错

551用户非本地,请尝试<forward-path>

452系统存储不足,要求的操作未执行

552过量的存储分配,要求的操作未执行

553邮箱名不可用,要求的操作未执行

354开始邮件输入,以""结束

554操作失败

中国电脑网,为你解决电脑难题!(20070701即将重开,欢迎到时候来啊)

http://wwwDianNaocomcn

接收和发送邮件的服务器地址是不能乱写的,虽然各邮箱设置方法大同小异,只是不同服务器特征字符不同,但还要根据不同邮箱设置不同的SMTP地址。具体方式如下:

一、163的邮箱:  

打开 Outlook(即 Outlook Express),点击“工具”,然后选“帐户”。

单击“添加”,在弹出菜单中选择“邮件”,进入 Internet 连接向导。  

在“显示名”字段中输入真实姓名,然后单击“下一步”。  

在“电子邮件地址”字段中输入完整 163 免费邮地址(you@163com),然后单击“下一步”。  

在“接收邮件(pop、IMAP或HTTP)服务器”字段中输入 pop163com。在“发送邮件服务器 (SMTP)”字段中输入:smtp163com,单击“下一步”。  

在“帐户名”字段中输入163免费邮用户名(仅输入@ 前面的部分)。在“密码”字段中输入邮箱密码,然后单击“下一步”。  

点击“完成”。  

在 Internet 帐户中,选择“邮件”选项卡,选中刚才设置的帐号,单击“属性”。  

在属性设置窗口中,选择“服务器”选项卡,勾选“我的服务器需要身份验证”,并点击旁边的“设置”按钮。  

登录信息选择“使用与接收邮件服务器相同的设置”,确保您在每一字段中输入了正确信息。  

点击“确定”。  

二、QQ邮箱

QQ邮箱设置很简单,点击设置,切换到账户设置,拉到下面,点击POP3/SMTP 服务右边的开启。

然后在邮箱客户端,比如Foxmail添加QQ邮箱账户,一般会自动识别POP3 和 SMTP 服务器地址,如果没有识别到,可以按如下地址设置:

注:

1、SMTP服务器需要身份验证。

2、如果是设置POP3和SMTP的SSL加密方式,则端口如下:

1)POP3服务器(端口995);2)SMTP服务器(端口465或587)。

三、如果是其它的邮箱,比如sohu、sina只需要将163换成sina、sohu就可以了。  

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » smpt服务器的问题

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情