RFC821-简单邮件传输协议(SMTP)中文版-2_PHP
SMTP
本文出自: 作者: (2001-11-23 08:08:00)4.1.2. COMMAND语法格式
命令是由命令码和其后的参数域组成的。命令码是四个字母组成的,不区别
大小写。因为下面的命令的作用是相同的:
MAIL Mail mail MaIl mAIl
这对于引导任何参数值的标记也是适用的,如TO和to就是一样的。命令码和
参数由一个或多个空格分开。然而在回复路径和转发路径中的参数是区别大小写
的。特别是在一些主机上,"smith"和"Smith"就根本不是一个用户。
参数域由不定长的字符串组成,它由
不会采取任何行动。方括号代表可选的参数域。如果不选择的话,系统选择默认
的设置。
下面是SMTP命令:
HELO
RCPT
DATA
RSET
SEND
SOML
SAML
VRFY
EXPN
HELP [
NOOP
QUIT
TURN
上面参数域的格式在下面给BNF的格式给出,其中的"..."代表对于一个
域的一次或多次的重复。
::= |
|
::=| "\"
::= "." "." "."
::= |
::=
::= 回车符(ASCII码13) ::= (ASCII码10)
::= 空格(ASCII码32) ::=由一个,两个或三个数字组成的介
于0-255之间的数字
::= 所有A-Z的52个大小写英文字母
::= 128个ASCII字符,但不包括空格和特殊字符
::= 0-9数字
::=不包括, ,"或\的128个ASCII字符
::=所有128个ASCII字符
::= "" | "(" | ")" | "[" | "]" | "\" | "." | "," | ";" | ":" | "@" """
或控制字符
注意: "\"是一个转意字符,它表示在其后的字符代表另外的意义。
例如"Joe\,Smith"用于表示单独一个由逗号分隔的用户名。主机通常由转化为
地址的名称代表。注意:域的名称元素是正式的名称,不能够使用昵称或假名。
有时候名称的转变机制可能不知道主机,这就造成了通信的阻塞。为了解决这
个问题,可以采取两种方法:一种方法是:在"#"后加入一个十进制数表示主机地址;
另一种方法是在其后加入32位的IP地址,IP地址的形式是由句号分隔的四个介于
0-255之间的十进制数。时间戳行和返回路径行的格式通常由下面定义:
::= "Return-Path:"
::= "Received:"
::= ";"
::= "FROM"
::= "BY"
::= [ ] [ ] [ ] [ ]
::= "VIA"
::= "WITH"
::= "ID"
::= "FOR"
::= 在网络信息中心注册的连接的标准名称
::= 在网络中心注册的协议的名称
::=
::=
::= ":" ":"
::= 由一个或两个数字组成的每月1-31日
::= "JAN" | "FEB" | "MAR" | "APR" | "MAY" | "JUN" | "JUL" | "AUG" | "SEP" | "OCT" | "NOV" | "DEC"
::= 由两位数字表示本世界的年代00-99
::= 每天的24小时,由0到24
::= 每小时的分钟数0-59
::= 每分钟的秒数0-59
::= 全球标准时区
返回路径例子
Return-Path:
时间戳行例子
Received: FROM ABC.ARPA BY XYZ.ARPA ; 22 OCT 81 09:23:59 PDT
Received: from ABC.ARPA by XYZ.ARPA via TELENET with X25
id M12345 for Smith@PDQ.ARPA ; 22 OCT 81 09:23:59 PDT
4.2. SMTP响应
对SMTP命令的响应是多样的,它确定了在邮件传输过程中请求和处理的
同步,也保证了发送SMTP知道接收SMTP的状态。每个命令必须有且只有一个
响应。
SMTP响应由三位数字组成,其后跟一些文本。数字帮助决定下一个应该
进入的状态,而文本对人是有意义的。三位的响应已经包括了足够的信息,
不用再阅读文本,文本可以直接抛弃或者传递给用户。特别的是,文本是与
接收和环境相关的,所以每次接收到的文本可能不同。在附录E中可以看到
全部的响应码。正规的情况下,响应由下面序列构成:三位的数字,,
一行文本和一个,或者也可以是一个多行响应。只有EXPN和HELP命令
可以导致多行应答,然而,对所有命令,多行响应都是允许的。
4.2.1. REPLY CODES BY FUNCTION GROUPS 500 格式错误,命令不可识别
(此错误也包括命令行过长)
501 参数格式错误
502 命令不可实现
503 错误的命令序列
504 命令参数不可实现
211 系统状态或系统帮助响应
214 帮助信息
220服务就绪
221服务关闭传输信道
421服务未就绪,关闭传输信道(当必须关闭时,此应答可以作
为对任何命令的响应)
250 要求的邮件操作完成
251 用户非本地,将转发向
450 要求的邮件操作未完成,邮箱不可用(例如,邮箱忙)
550 要求的邮件操作未完成,邮箱不可用(例如,邮箱未找到,或不可访问)
451 放弃要求的操作;处理过程中出错
551 用户非本地,请尝试
452 系统存储不足,要求的操作未执行
552 过量的存储分配,要求的操作未执行
553 邮箱名不可用,要求的操作未执行(例如邮箱格式错误)
354 开始邮件输入,以. 结束
554 操作失败
4.3. 命令和应答序列
发送者和接收者之间的通信是一问一答的交替对话形式,由发送者控制。
这样,发送发出一条命令,接收者发出一个响应。接收者在发送下一条指令
前必须等应答。一个重要的应答是连接应答。在连接完成时,接收者通常会
发送220"服务就绪"。发送者在继续发送指令前会等待此应答。注意:每个连
接应答必须拥有服务主机的正式名称作为第一部分,其后跟响应码。例如:
220USC-ISIF.ARPA Service ready
下面列出了成功和失败应答,这些应答必须遵守严格的次序,接收者可以
不理会应答中的文本,但是由数字指定的意义和操作和命令应答序列不能更改。
命令响应序列:
每个命令列出了它可能的应答。使用在可能应答前的前缀"P"表示预备的
(未用在SMTP中),"I"表示中间的,"S"表示成功,"F"表示失败,"E"表示错
误。如果STMP接收者必须关闭信道,可以对任何命令作出421(服务不可用,
关闭传输信道)响应。此表基于下面要讲述的状态图:
CONNECTION ESTABLISHMENT(建立连接)
S: 220
F: 421
HELO
S: 250
E: 500, 501, 504, 421
S: 250
F: 552, 451, 452
E: 500, 501, 421
RCPT S: 250, 251 F: 550, 551, 552, 553, 450, 451, 452 E: 500, 501, 503, 421
DATA
I: 354 -> data -> S: 250
F: 552, 554, 451, 452
F: 451, 554
E: 500, 501, 503, 421
RSET
S: 250
E: 500, 501, 504, 421
SEND
S: 250
F: 552, 451, 452
E: 500, 501, 502, 421
SOML
S: 250
F: 552, 451, 452
E: 500, 501, 502, 421
SAML
S: 250
F: 552, 451, 452
E: 500, 501, 502, 421
VRFY
S: 250, 251
F: 550, 551, 553
E: 500, 501, 502, 504, 421
EXPN
S: 250
F: 550
E: 500, 501, 502, 504, 421
HELP
S: 211, 214
E: 500, 501, 502, 504, 421
NOOP
S: 250
E: 500, 421
QUIT
S: 221
E: 500
TURN
S: 250
F: 502
E: 500, 503
4.4. 状态图
下面状态图是一个简单的SMTP实现,每一组命令都有一个状态图。在图中,
只使用了响应码的第一位数字作为响应的代表。命令组是对每个命令建立模式然
后以结构模式将命令集中起来的。对于每个命令有三种可能的应答:成功(S),
失败(F)和错误(E)。在状态中,我们使用B代表开始,使用W代表等待应答。
此状态图使用了如下命令:HELO, MAIL, RCPT, RSET, SEND, SOML,
SAML, VRFY, EXPN, HELP, NOOP, QUIT, TURN.
下面是对于DATA命令的更复杂的状态图:
注意:这里的邮件内容是多行的,接收者只能收到最后一行时才发出应答。
4.5. 详细内容
4.5.1. 最小实现
为使SMTP能够工作,对于接收者来说,这是最少应该实现的命令:
COMMANDS - HELO
RCPT
DATA
RSET
NOOP
QUIT
4.5.2. 透明性
没有对数据透明性的保证,在发送类似". "结束邮件内容时会
发生错误。通常,用户不关心这个"非法"序列。若要所有用户能够透明地使用
必须使用以下措施:
1. 在发送邮件之间,发送SMTP必须检查邮件的每一行,如果是一个句号,就
在行首再加一个句号。
2. 当邮件被接收时,接收SMTP必须检查邮件的每一行,如果发现一行仅有一
个句号,邮件就此结束,如果一行中有两个句号,那么这一行中就只应该有一
个句号,而将第一个句号删除。
发送的邮件内容可以包括所有128个ASCII字符。所有字符发送到收信者的
邮箱,包括格式符号和其它控制字符。如果传输信道提供一个8位数据流,7位
的ASCII码就可以在其中传送,而将最高位置为0。一些系统在接收和存储时需
要对数据进行格式转换。对于使用不同于ASCII字符集的主机或不能以串的形
式而只能以记录形式存储的主机更是如此,如果必须进行转换,必须能够再次
转换回来,对于用于存储转发的主机更是如此。
4.5.3. 大小
一些对象需要最大和最小大小。也就是说,每个实现必须能够接收大于最
小大小的对象,不能发送大于最大大小的对象。对于可能的最大大小,实现技
术上并没有限制。
用户 用户名的最大长度是64个字节。
域 域的最大长度是64个字符
路径 回复路径和转发路径的最大长度是256个字符
命令行 命令行的最大长度,包括回车符为512个字符
应答行 应答行的最大长度,包括回车符为512个字符
文本行 文本行的最大长度,包括回车符和为透明性增加的字符不得超过1000
个字符
接收缓冲区 接收缓冲区最多可以容纳100个接收者
如果出错,应答如下:
500 行过长
501 路径过多
552 接收者过多
552 邮件内容过多
附录 A TCP传输服务
传输控制协议(TCP)在ARPA Internet中使用,并遵守网络协议的US DoD标
准。SMTP传输信道连接建立在发送进程的端口U和接收进程的端口L上。一个单一
的全双工信道用于传输。被指定用于此协议的服务端口为25,也就是说L=25。
TCP连接支持传输8位字节,而SMTP只需要传输7位;这样,每个8位字符的最高
位被置为0。
附录 B NCP传输服务
ARPANET主机-主机协议(由网络控制程序实现)也可以用于ARPANET。
SMTP传输信道连接建立在发送进程的端口U和接收进程的端口L上;其后,根据
初始连接协议(ICP)建立一对简单连接。这一对简单连接被用作传输信道。
此协议被指定为连接套接字25,也就是说L=25。NCP连接支持传输8位字节,而
SMTP只需要传输7位;这样,每个8位字符的最高位被置为0。
附录 C NITS
也可以使用网络独立转输服务。通过在NITS在发送进程和接收进程之间建
立传输信道。发送进程执行CONNECT原语,然后等待接收ACCEPT原语。NITS连接
支持传输8位字节,而SMTP只需要传输7位;这样,每个8位字符的最高位被置
为0。
附录 D X.25传输服务
可以直接使用公共数据网络接收的X.25服务,然而,推荐在其上使用可靠
的端到端的协议如TCP。
附录 E 应答码构成方法
三位的应答码每一位都有特定的意义。每一位应答表示是否是成功的,失败
的或未完成的。通过这一位,不复杂的SMTP发送就可以决定下一步的操作,如果
发送方希望大概了解究竟出了什么问题,它可以检测第二位,而第三位则保存了
最后更完整的信息。也就是说,从第一位到第三位,接收方可以一步比一步精
确地确定接收方的状态。对于第一位有五种可能的表示代表不同的意义:
1yz 部分完成应答
命令被接受,但是要求的操作被中止,原因在应答码中。发送方应该再次
发送另一命令指明是否继续操作,或者放弃操作。
2yz 全部完成应答
要求的操作已经完成,可以开始另一个新的请求。
3yz 需要近一步信息的部分完成应答
命令被接受,但是要求的操作被中止,需要接收进一步的信息。发送方应
该发送另一条命令指明进一步的信息。
4yz 暂时未完成应答
命令未被接受,要求的操作也未执行,但是发生错误的状态是暂时的,可
以再一次请求操作。发送者应该返回命令序列的开始命令(如果有的话)。很
难解释这个暂时的意义,特别对于两个不同的站点来说。区别应答是属于些类
还是下一类的方法是:如果能够不加任何改变地重复的再一次发送命令,就是
本类的,如果不是,就是下一类(5yz)的。
5yz 永久未完成应答
命令未被接受,要求的操作未完成。发送对命令的重复不起作用。即使一
些出错条件已经改变,但是用户已经不希望重试,而希望在未来的某个时间再
进行操作。
应答的第二位的意义有以下几类:
x0z 语法:此类型的应答是针对以下情况的:语法错误;符合语法但命令不存
在功能;未完成或冗余的命令。
x1z 信息:此类型的应答是用于请求信息的,如状态或帮助信息。
x2z 连接:此类型的应答是关于传输信道的。
x3z 未使用。
x4z 未使用。
x5z 邮件系统:此类型的应答指明接收方邮件系统关于请求传送或其它操作
的状态的。
第三位给出了更详细的说明。列出的应答表说明了这一点。文本应答是
推荐使用的,而不是必须使用的,它的内容是可以根据不同情况而变化的。
另一方面,应答码必须严格遵守本节的说明。接收方不应该因为稍稍的不同
情况而自己创建新的代码而不使用已经定义的代码。例如,如NOOP命令的情
况,如果成功执行它后,不用返回任何新的信息,只用返回250应答。当发送
的命令要求一个未实现的站点指定操作时,应答应该是502。 应答文本可能
多于一行;在此情况下,文本必须被标记,接收文本的一方才不致于少读入
一行数据。这要求特定的格式说明多行应答。此格式是:每一行,除了最后
一行外,都以应答码加一个"-"开始。而最后一行以应答码加空格开始。
如下例:
123-First line
123-Second line
123-234 text beginning with numbers
123 The last line
通常情况下,接收的一方只用寻找应答码加空格的那一行就可以,而忽
略前面行的内容。在特殊的情况下,发送方必须知道响应文本的内容,这时
接收应答的一方可以通过当时的情况正确地决定是否需要知道文本的内容。
附录 F 一些例子
本节提供了一些SMTP会话的完整例子。
典型的SMTP操作
此类显示邮件如何由在USC-ISIF和机上的Smith发送到BBN-UNIX主机上
Jones,Green和Brown的。这里,我们假设USC-ISIF主机直接和BBN-UNIX主机联系。
Jones和Brown接收邮件,而Green在BBN-UNIX上没有邮箱。
R: 220 BBN-UNIX.ARPA Simple Mail Transfer Service Ready
S: HELO USC-ISIF.ARPA
R: 250 BBN-UNIX.ARPA
S: MAIL FROM:
R: 250 OK
S: RCPT TO:
R: 250 OK
S: RCPT TO:
R: 550 No such user here
S: RCPT TO:
R: 250 OK
S: DATA
R: 354 Start mail input; end with.
S: Blah blah blah...
S: ...etc. etc. etc.
S: .
R: 250 OK
S: QUIT
R: 221 BBN-UNIX.ARPA Service closing transmission channel
放弃SMTP操作
R: 220 MIT-Multics.ARPA Simple Mail Transfer Service Ready
S: HELO ISI-VAXA.ARPA R: 250 MIT-Multics.ARPA
S: MAIL FROM:
R: 250 OK
S: RCPT TO:
R: 250 OK
S: RCPT TO:
R: 550 No such user here
S: RSET
R: 250 OK
S: QUIT
R: 221 MIT-Multics.ARPA Service closing transmission channel
转发邮件
第一步:源主机到转发主机
R: 220 USC-ISIE.ARPA Simple Mail Transfer Service Ready
S: HELO MIT-AI.ARPA
R: 250 USC-ISIE.ARPA
S: MAIL FROM:
R: 250 OK
S: RCPT TO:
R: 250 OK
S: DATA
R: 354 Start mail input; end with.
S: Date: 2 Nov 81 22:33:44
S: From: John Q. Public
S: Subject: The Next Meeting of the Board
S: To: Jones@BBN-Vax.ARPA
S:
S: Bill:
S: The next meeting of the board of directors will be
S: on Tuesday.
S: John.
S: .
R: 250 OK
S: QUIT
R: 221 USC-ISIE.ARPA Service closing transmission channel

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Windows 11 제어판에 Outlook 메일 아이콘이 없나요? 이러한 예상치 못한 상황은 통신 요구를 위해 OutlookMail을 사용하는 일부 개인들 사이에 혼란과 우려를 불러일으켰습니다. 내 Outlook 이메일이 제어판에 표시되지 않는 이유는 무엇입니까? 제어판에 Outlook 메일 아이콘이 없는 데에는 여러 가지 이유가 있을 수 있습니다. Outlook이 올바르게 설치되지 않았습니다. Microsoft Store에서 Office 응용 프로그램을 설치해도 메일 애플릿이 제어판에 추가되지 않습니다. 제어판에 mlcfg32.cpl 파일 위치가 없습니다. 레지스트리의 mlcfg32.cpl 파일 경로가 올바르지 않습니다. 현재 운영 체제가 이 애플리케이션을 실행하도록 구성되어 있지 않습니다.

하드디스크 일련번호는 하드디스크의 중요한 식별자로 일반적으로 하드디스크를 고유하게 식별하고 하드웨어를 식별하는 데 사용됩니다. 운영 체제를 설치하거나, 올바른 장치 드라이버를 찾거나, 하드 드라이브를 수리할 때와 같이 하드 드라이브 일련 번호를 쿼리해야 하는 경우도 있습니다. 이 문서에서는 하드 드라이브 일련 번호를 확인하는 데 도움이 되는 몇 가지 간단한 방법을 소개합니다. 방법 1: Windows 명령 프롬프트를 사용하여 명령 프롬프트를 엽니다. Windows 시스템에서는 Win+R 키를 누르고 "cmd"를 입력한 후 Enter 키를 눌러 명령을 엽니다.

PHP는 이메일을 비동기식으로 보냅니다. 이메일이 전송될 때까지 오래 기다리지 마세요. 소개: 웹 개발에서 이메일 보내기는 일반적인 기능 중 하나입니다. 하지만 이메일을 보내려면 서버와의 통신이 필요하기 때문에 사용자가 이메일이 전송될 때까지 오랜 시간을 기다려야 하는 경우가 많습니다. 이 문제를 해결하기 위해 PHP를 사용하여 이메일을 비동기적으로 보내 사용자 경험을 최적화할 수 있습니다. 이 기사에서는 특정 코드 예제를 통해 비동기적으로 이메일을 보내고 오랜 대기 시간을 피하기 위해 PHP를 구현하는 방법을 소개합니다. 1. 비동기식 이메일 전송 이해

Word를 사용하여 편지 병합 문서를 인쇄할 때 빈 페이지가 나타나는 경우 이 문서가 도움이 될 것입니다. 메일 병합은 개인화된 문서를 쉽게 작성하여 여러 수신자에게 보낼 수 있는 편리한 기능입니다. Microsoft Word에서 메일 병합 기능은 사용자가 각 수신자에 대해 동일한 콘텐츠를 수동으로 복사하는 데 소요되는 시간을 절약해 주기 때문에 높은 평가를 받고 있습니다. 편지 병합 문서를 인쇄하려면 우편물 탭으로 이동하세요. 그러나 일부 Word 사용자는 메일 병합 문서를 인쇄하려고 할 때 프린터에서 빈 페이지가 인쇄되거나 전혀 인쇄되지 않는다고 보고했습니다. 이는 잘못된 형식이나 프린터 설정 때문일 수 있습니다. 문서 및 프린터 설정을 확인하고 인쇄하기 전에 문서를 미리 확인하여 내용이 올바른지 확인하세요. 만약에

PHP 이메일 추적 기능: 이메일에 대한 사용자 행동 및 피드백 이해 현대 사회에서 이메일은 사람들의 일상 생활과 업무에서 없어서는 안될 부분이 되었습니다. 기업의 경우 이메일 전송은 고객과 소통하고 제품이나 서비스를 홍보하는 중요한 방법 중 하나입니다. 그러나 이메일이 전송된 후 이메일이 수신되었는지, 읽었는지 또는 사용자가 이메일 내용에 어떻게 반응했는지 어떻게 알 수 있습니까? 이때 이메일 추적 기능이 특히 중요해집니다. 이메일 추적 기능은 이메일에 대한 사용자 행동과 피드백을 이해하는 데 도움이 될 수 있습니다.

PHP를 통해 간단한 온라인 예약 시스템 작성 방법 인터넷의 대중화와 사용자의 편의성 추구로 인해 온라인 예약 시스템이 점점 더 대중화되고 있습니다. 레스토랑, 병원, 미용실 또는 기타 서비스 산업이든 간단한 온라인 예약 시스템은 효율성을 높이고 사용자에게 더 나은 서비스 경험을 제공할 수 있습니다. 이 기사에서는 PHP를 사용하여 간단한 온라인 예약 시스템을 작성하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 데이터베이스 및 테이블 생성 먼저 예약 정보를 저장할 데이터베이스를 생성해야 합니다. MyS에서는

영어 버전과 중국어 버전의 Win10 사이의 주요 차이점은 언어 인터페이스와 사전 설치된 응용 프로그램에 있습니다. 영어 버전의 인터페이스는 영어이고 사전 설치된 모든 애플리케이션은 영어이며 중국어 버전의 인터페이스는 중국어이며 사전 설치된 애플리케이션도 중국어로 작동됩니다. 이 외에 두 버전의 기능과 작동은 실제로 완전히 동일합니다. win10 영어 버전과 중국어 버전의 차이점: 1. 언어: Windows 10 영어 버전에서는 영어가 기본 언어로 표시되는 반면, Windows 10 중국어 버전에서는 중국어가 기본 언어로 설정됩니다. 즉, 설치를 완료한 후 사용자는 시스템 인터페이스, 메뉴, 대화 상자, 오류 프롬프트 등이 모두 다른 언어로 표시되는 것을 볼 수 있습니다. 2. 사전 설치된 애플리케이션:

Java를 사용하여 간단한 학생 성과 보고서 생성기를 작성하는 방법은 무엇입니까? 학생 성과 보고서 생성기는 교사나 교육자가 학생 성과 보고서를 신속하게 생성하는 데 도움이 되는 도구입니다. 이 기사에서는 Java를 사용하여 간단한 학생 성과 보고서 생성기를 작성하는 방법을 소개합니다. 먼저 학생 개체와 학생 성적 개체를 정의해야 합니다. 학생 객체에는 학생의 이름, 학번 등의 기본 정보가 포함되고, 학생 점수 객체에는 학생의 과목 점수, 평균 성적 등의 정보가 포함됩니다. 다음은 간단한 학생 개체의 정의입니다.
