【问题标题】:What should I send after STARTLS?在 STARTTLS 之后我应该发送什么?
【发布时间】:2021-09-27 19:25:20
【问题描述】:

我正在使用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 连接重新开始吗?

【问题讨论】:

    标签: c++ smtp starttls


    【解决方案1】:

    在您发送(未加密的)STARTTLS 命令后,如果服务器返回除220 之外的任何回复,则处理它出现故障并根据需要继续使用其他 SMTP 命令(尽管此时,唯一的真正有意义的是QUIT)。

    如果服务器将220 返回到STARTTLS,则您需要在现有 TCP 连接上执行实际的 TLS 握手,从 TLS CLIENT HELLO 开始。无论您在套接字中使用的任何 TLS 库都应该能够为您处理这个问题,不要从头开始实现它。

    如果 TLS 握手成功,那么您可以发送更多的 SMTP 命令(通过 TLS 加密通道),从新的 EHLO 开始(因为服务器的功能可能并且可能会改变,最值得注意的是可用的 @987654327 @scheme),然后是 AUTHMAIL FROMRCPT TODATA/BDAT 等,最后是 QUIT,根据需要。

    如果 TLS 握手失败,TCP 连接将处于未知状态,因此无法进行进一步的 SMTP 通信。此时您所能做的就是关闭 TCP 连接并重新开始。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-06
      • 1970-01-01
      • 1970-01-01
      • 2013-12-04
      相关资源
      最近更新 更多