`
qizhijun
  • 浏览: 815 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

SMTP的基本命令及错误列表

阅读更多
SMTP的基本命令及错误列表

SMTP的基本命令
SMTP定义了14个命令,它们是:
HELO
MAIL FROM:
RCPT TO:
DATA
RSET
SEND FROM:
SOML FROM:
SAML FROM:
VRFY
EXPN
HELP [ ]
NOOP
QUIT
TURN
其中使得SMTP工作的基本的命令有7个,分别为:HELO﹑MAIL﹑RCPT﹑DATA﹑REST﹑NOOP和QUIT.介绍请到详细信息。


RCPT 服务器同意转发
RCPT --这个命令告诉收件方收件人的邮箱。当有多个收件人时,需要多次使用该命令,每次只能指明一个人。如果接收方服务器不同意转发这个地址的邮件,它必须报550错误代码通知发件方。如果服务器同意转发,它要更改邮件发送路径,把最开始的目的地(该服务器)换成下一个服务器。
2. SMTP的基本命令
SMTP定义了14个命令,它们是:
HELO
MAIL FROM:
RCPT TO:
DATA
RSET
SEND FROM:
SOML FROM:
SAML FROM:
VRFY
EXPN
HELP [ ]
NOOP
QUIT
TURN
其中使得SMTP工作的基本的命令有7个,分别为:HELO﹑MAIL﹑RCPT﹑DATA﹑REST﹑NOOP和QUIT.下面分别介绍如下。

HELO--发件方问候收件方,后面是发件人的服务器地址或标识。收件方回答OK时标识自己的身份。问候和确认过程表明两台机器可以进行通信,同时状态参量被复位,缓冲区被清空。

MAIL--这个命令用来开始传送邮件,它的后面跟随发件方邮件地址(返回邮件地址)。它也用来当邮件无法送达时,发送失败通知。为保证邮件的成功发送,发件方的地址应是被对方或中间转发方同意接受的。这个命令会清空有关的缓冲区,为新的邮件做准备。

RCPT --这个命令告诉收件方收件人的邮箱。当有多个收件人时,需要多次使用该命令,每次只能指明一个人。如果接收方服务器不同意转发这个地址的邮件,它必须报550错误代码通知发件方。如果服务器同意转发,它要更改邮件发送路径,把最开始的目的地(该服务器)换成下一个服务器。

DATA--收件方把该命令之后的数据作为发送的数据。数据被加入数据缓冲区中,以单独一行是"."的行结束数据。结束行对于接收方同时意味立即开始缓冲区内的数据传送,传送结束后清空缓冲区。如果传送接受,接收方回复OK。

REST--这个命令用来通知收件方复位,所有已存入缓冲区的收件人数据,发件人数据和待传送的数据都必须清除,接收放必须回答OK.

NOOP--这个命令不影响任何参数,只是要求接收放回答OK, 不会影响缓冲区的数据。

QUIT--SMTP要求接收放必须回答OK,然后中断传输;在收到这个命令并回答OK前,收件方不得中断连接,即使传输出现错误。发件方在发出这个命令并收到OK答复前,也不得中断连接。

下面是SMTP答复中用到的代码和含义:

500 Syntax error, command unrecognized
500  语法错误,命令无法识别

[This may include errors such as command line too long]
这种错误可能包括命令行太长等

501 Syntax error in parameters or arguments
501 语法错误在参数或论据

502 Command not implemented
502 命令不能执行

503 Bad sequence of commands
503 错误的命令次序

504 Command parameter not implemented
504 命令参数不能执行

211 System status, or system help reply
211 系统状态或系统帮助回复
214 Help message
214 帮助信息
[Information on how to use the receiver or the meaning of a
particular non-standard command; this reply is useful only to the human user]

220 Service ready
220 服务准备
221 Service closing transmission channel
221 服务关闭传输频道
421 Service not available, closing transmission channel
421 服务不可用,关闭传输频道
[This may be a reply to any command if the service knows it must shut down]
服务器即将关闭的信息
250 Requested mail action okay, completed
250 被请求的邮件完全准备好
251 User not local; will forward to
251 非本地用户,继续解析
450 Requested mail action not taken: mailbox unavailable 、
450
[E.g., mailbox busy]
550 Requested action not taken: mailbox unavailable
[E.g., mailbox not found, no access]
451 Requested action aborted: error in processing
551 User not local; please try
452 Requested action not taken: insufficient system storage
552 Requested mail action aborted: exceeded storage allocation
553 Requested action not taken: mailbox name not allowed
[E.g., mailbox syntax incorrect]
354 Start mail input; end with .
554 Transaction failed
最后,让我们看一个RFC821中给出的例子。这封信是Smith在主机Alpha.ARPA 发给主机Beta.ARPA上的
Jones,Green和 Brown.并且假定两台主机在同一个网络上。

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
邮件最后被对方接受。
分享到:
评论

相关推荐

    用SMTP命令发送邮件的C++实现

    这个文件可能包含了处理网络连接、构建SMTP命令字符串、错误处理等功能。如果你正在查看这个文件,你可能会看到如何将C++的字符串操作与SMTP协议结合使用的示例。 在实际应用中,为了简化这一过程,开发者通常会...

    C实现SMTP服务器,使用TCP命令实现功能比较完善 .rar_SMTP服务器_smtp_smtp 服务器_tcp命令_实现S

    6. **错误处理**:SMTP服务器应能处理各种错误情况,例如无效的命令、超时、网络故障等,并向客户端返回适当的错误代码和消息。 7. **多线程编程**:为了处理多个并发连接,SMTP服务器通常使用多线程或异步I/O。...

    SMTP邮件服务器实验报告及源代码.docx

    3. **与SMTP协议的比较**:尽管程序基本遵循了SMTP协议,可能存在一些简化或差异,比如可能没有实现所有SMTP扩展命令,或者在错误处理方面可能不如实际SMTP服务器那么全面。 总的来说,这个实验帮助学生深入理解...

    smtp的邮件发送接收客户端和服务器 实现

    - 错误处理:处理SMTP命令的错误响应,例如无效命令、权限问题等。 `test_server.c`文件很可能是实现SMTP服务器的代码。它可能包括以下部分: 1. 建立监听套接字,绑定到端口25。 2. 在循环中调用accept()函数等待...

    SMTP.rar_smtp 发送邮件_smtp协议

    首先,让我们深入了解一下SMTP协议的基本概念。SMTP基于TCP/IP协议族,使用端口25进行通信。它遵循客户端-服务器模型,其中邮件客户端(如电子邮件应用程序)作为SMTP客户端,与邮件服务器(SMTP服务器)进行交互来...

    易语言简单SMTP协议源码

    - **错误处理**:在与SMTP服务器交互过程中,需要捕获并处理可能出现的错误,如连接失败、命令错误等。 - **多线程**:如果需要同时处理多个邮件发送,可能需要使用易语言的多线程支持。 - **SMTP命令的封装**:将...

    SMTP邮件协议

    7. **SMTP基本命令集**: - HELO/EHLO:向服务器自我介绍。 - MAIL FROM:设置发件人。 - RCPT TO:添加收件人。 - DATA:开始传输邮件内容。 - VRFY:验证邮箱。 - EXPN:扩展邮件列表。 - HELP:获取帮助...

    一个可以参考的smtp客户端代码

    有调用例子",这意味着这个代码示例不仅包含了基本的SMTP交互,还可能包括了错误处理和实际的邮件内容构建等功能。在实际开发中,一个完整的SMTP客户端代码可能包含以下关键部分: - **SMTP服务器配置**:设置SMTP...

    smtp_socket_test

    在`smtp_socket_test`程序中,`libsock`可能是一个包含辅助函数的库,用于封装socket操作,如错误处理、网络地址解析(`getaddrinfo()`)、连接管理等,简化了代码并提高了可读性。 总的来说,这个项目提供了实践...

    smtp C语言

    SMTP协议的基本流程包括以下几个关键步骤: 1. **连接服务器**:客户端首先需要与SMTP服务器建立TCP连接,通常是通过端口25。在C语言中,这可以通过使用socket API来实现,包括socket()函数创建套接字,connect()...

    smtp sdk

    开发人员在使用SMTP SDK时,需要了解SMTP协议的基本原理,并结合SDK提供的API来编写邮件发送代码。通过Ant构建文件,可以自动化构建和测试流程,提高开发效率。同时,查看文档可以帮助理解SDK的具体用法和功能,而...

    VC++_SMTP协议电子邮件传送剖析

    #### SMTP命令列表 为了更直观地了解SMTP命令及其功能,下面列出了一些关键的SMTP命令: | SMTP命令 | 命令说明 | |-----------------|------------------------------------------------------------| | HELO ...

    linux下c实现SMTP协议

    - 在C语言中,实现SMTP协议通常涉及打开套接字,发送命令,接收响应,处理错误,最后关闭连接。这些步骤可以在一个循环中完成,直到邮件发送成功。 以上是Linux下使用C语言实现SMTP协议的一些核心概念和步骤。实际...

    smtp sample

    了解了SMTP的基本工作原理后,开发者可以利用这些知识来实现自己的邮件服务功能,比如自动化报告、通知系统或用户注册验证邮件。在实际应用中,我们还需要考虑错误处理、重试机制、日志记录等,以确保邮件发送的可靠...

    c++通过smtp发送邮件及附件

    当然,这只是一个基本示例,实际的邮件发送可能需要处理更多细节,比如错误检查、SSL/TLS加密等。 在提供的"mySMTP"文件中,可能包含了实现上述功能的C++源代码。通过阅读和理解这些代码,你可以更深入地了解如何在...

    简单邮件传输协议(SMTP)中文版

    SMTP的过程包括基本发送过程、向前传送邮件、确认邮箱名称和扩展邮件列表、发送到终端和打开关闭交换。在基本发送过程中,操作由MAIL命令开始给出发送者标识。一系列或更多的RCPT命令紧跟其后,给出了接收者信息,...

    利用Winsock实现SMTP协议

    - 错误处理:处理SMTP服务器返回的错误代码,如5xx系列错误表示服务器拒绝执行命令。 - 安全性:考虑使用SSL/TLS加密连接,防止数据在传输过程中被截获。 - 反垃圾邮件策略:遵守RFC规定,避免被目标服务器标记为...

    Smtp.rar_smtp

    3. **发送邮件命令**:使用SMTP命令如`HELO`(你好)或`EHLO`(扩展你好)与服务器进行交互,然后是`MAIL FROM:`(发件人)、`RCPT TO:`(收件人)等命令指定邮件的发件人和收件人。 4. **数据传输**:在`DATA`命令...

    用Java实现SMTP服务器

    4. **错误处理**:实现错误处理机制,向客户端返回正确的SMTP响应码,例如`250 OK`表示命令成功,`550`表示请求的操作未完成等。 5. **多线程支持**:为了同时处理多个客户端连接,通常需要实现多线程或异步处理机制...

Global site tag (gtag.js) - Google Analytics