在STARTTLS之后,如果smtp客户端发送EHLO命令,则不返回任何内容

时间:2012-10-15 07:18:35

标签: c# smtp

我正在SMTP编写自己的c#客户端(用于紧凑框架)。尝试使用smtp.gmail.com服务器

如果STARTTLS客户端发送smtp为空,则EHLO Command response from server is命令成功。

message = "EHLO 10.192.4.223\r\n";
      Write(message);
      response = Response();
      if (response.Substring(0, 3) != "250")
      {
        throw new SmtpException(response);
      }
      message = "STARTTLS\r\n";
      Write(message);
      response = Response();
      if (response.Substring(0, 3) != "220")
      {
        throw new SmtpException(response);
      }

      message = "EHLO 10.192.4.223\r\n";
      Write(message);
      response = Response();
      if (response.Substring(0, 3) != "250") //empty response
      {
        throw new SmtpException(response);
      }

1 个答案:

答案 0 :(得分:2)

因为在STARTTLS之后你不再需要发送纯文本命令。相反,您应该在相同的现有TCP套接字/连接上切换到TLS安全通信。

查看RFC 2487 - SMTP Service Extension for Secure SMTP over TLS说的内容:

  

收到对STARTTLS命令的220响应后,客户端
  在给出任何其他SMTP之前,应该开始TLS协商   命令。

  

5.2 STARTTLS命令的结果

     

完成TLS握手后,SMTP协议将重置为   初始状态(服务器发出220后的SMTP状态)   服务准备问候)。服务器必须丢弃任何知识
  从客户端获得,例如EHLO命令的参数,
  这不是从TLS协商本身获得的。客户
  必须丢弃从服务器获得的任何知识,例如列表   SMTP服务扩展,不是从TLS获得的   谈判本身。客户端应该发送一个EHLO命令作为
  成功进行TLS协商后的第一个命令。