我正在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);
}
答案 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协商后的第一个命令。