RFC 2821 - 客户端如何知道何时发送第一条命令?

RFC 2821 - how does client know when to send first command?

来自 RFC 2821:

D.2 中止的 SMTP 事务场景

  S: 220 foo.com Simple Mail Transfer Service Ready
  C: EHLO bar.com
  S: 250-foo.com greets bar.com
  S: 250-8BITMIME
  S: 250-SIZE
  S: 250-DSN
  S: 250 HELP
  C: MAIL FROM:<Smith@bar.com>
  S: 250 OK
  C: RCPT TO:<Jones@foo.com>
  S: 250 OK
  C: RCPT TO:<Green@foo.com>
  S: 550 No such user here
  C: RSET
  S: 250 OK
  C: QUIT
  S: 221 foo.com Service closing transmission channel

我的理解是

  S: 250-8BITMIME
  S: 250-SIZE
  S: 250-DSN
  S: 250 HELP

是服务器支持的扩展列表。 在给定的示例中,在收到此列表后,客户端发送第一个命令 EHLO。 但是它怎么知道这个列表中不会有更多的项目呢?没有来自服务器的命令,如 "LISTING_EXTENSIONS_DONE"。 所以例如如果服务器只有 8BITTIME 扩展,客户端如何知道它是唯一的并且它不应该等待服务器发送其他扩展?

回复 SMTP EHLO 命令包含以
开头的行 250-... - 更多回复行
250 ... - 最后回复行

RFC-2821/4.1.1.1

4.1.1.1 Extended HELLO (EHLO) or HELLO (HELO)
...
Normally, the response to EHLO will be a multiline reply. Each line of the response contains a keyword and, optionally, one or more parameters. Following the normal syntax for multiline replies, these keyworks follow the code (250) and a hyphen for all but the last line, and the code and a space for the last line.