我应该在 STARTTLS 之后发送什么?
What should I send after STARTLS?
我正在使用 smtp.gmail.com
和端口 587。连接成功后,我发送 EHLO
并收到以下内容:
250-smtp.gmail.com at your service, [62.16.4.123]
250-SIZE 35882577
250-8BITMIME
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF
我选择了STARTTLS
,然后我不知道要向服务器发送什么以及登录和发送电子邮件。
如果我发送类似于 AUTH LOGIN
或 base64 加密的密码登录,连接将断开。
有人可以解释我的客户应该发送什么来成功完成 STARTTLS
协商吗?
或者,我应该使用新的 SSL 连接重新开始吗?
在您发送(未加密的)STARTTLS
命令后,如果服务器 returns 除了 220
以外的任何回复,则处理失败并继续执行其他 SMTP 命令需要(尽管在这一点上,唯一真正有意义的是 QUIT
)。
如果服务器 returns 220
到 STARTTLS
,则需要在现有 TCP 连接上执行实际的 TLS 握手,从 TLS CLIENT HELLO 开始。无论您在套接字上使用什么 TLS 库都应该能够为您处理这个问题,不要从头开始实施。
如果 TLS 握手成功,那么您可以发送更多的 SMTP 命令(通过 TLS 加密通道),从新的 EHLO
开始(因为服务器的功能可能会改变,最显着的是可用的 AUTH
方案),然后是 AUTH
、MAIL FROM
、RCPT TO
、DATA
/BDAT
等,最后是 QUIT
, 根据需要。
如果 TLS 握手失败,TCP 连接将处于未知状态,因此无法进行进一步的 SMTP 通信。此时您所能做的就是关闭 TCP 连接并重新开始。
我正在使用 smtp.gmail.com
和端口 587。连接成功后,我发送 EHLO
并收到以下内容:
250-smtp.gmail.com at your service, [62.16.4.123]
250-SIZE 35882577
250-8BITMIME
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF
我选择了STARTTLS
,然后我不知道要向服务器发送什么以及登录和发送电子邮件。
如果我发送类似于 AUTH LOGIN
或 base64 加密的密码登录,连接将断开。
有人可以解释我的客户应该发送什么来成功完成 STARTTLS
协商吗?
或者,我应该使用新的 SSL 连接重新开始吗?
在您发送(未加密的)STARTTLS
命令后,如果服务器 returns 除了 220
以外的任何回复,则处理失败并继续执行其他 SMTP 命令需要(尽管在这一点上,唯一真正有意义的是 QUIT
)。
如果服务器 returns 220
到 STARTTLS
,则需要在现有 TCP 连接上执行实际的 TLS 握手,从 TLS CLIENT HELLO 开始。无论您在套接字上使用什么 TLS 库都应该能够为您处理这个问题,不要从头开始实施。
如果 TLS 握手成功,那么您可以发送更多的 SMTP 命令(通过 TLS 加密通道),从新的 EHLO
开始(因为服务器的功能可能会改变,最显着的是可用的 AUTH
方案),然后是 AUTH
、MAIL FROM
、RCPT TO
、DATA
/BDAT
等,最后是 QUIT
, 根据需要。
如果 TLS 握手失败,TCP 连接将处于未知状态,因此无法进行进一步的 SMTP 通信。此时您所能做的就是关闭 TCP 连接并重新开始。