发送完所有数据后,SMTP是否应关闭套接字?

时间:2014-07-29 09:36:24

标签: email smtp

我正在尝试实现基于Gevent的SMTP服务器,名为gsmtpd

https://github.com/34nm/gsmtpd

然而,在我的生产服务器登录3周后,我发现大多数网络邮件提供商'客户端在发送所有数据后不会关闭套接字。 引发大量日志表示套接字超时。

我应该在发送所有数据后用Bye关闭套接字吗?

2 个答案:

答案 0 :(得分:3)

客户端发送邮件后,您的SMTP服务器应发送250 2.0.0 Ok以指示邮件已收到。然后,客户端应发送quit以结束会话,或rset发送另一条消息。

如果客户端发送quit,则您的SMTP服务器可以发送221 2.0.0 Bye并关闭套接字。

如果客户端发送rset,则您的SMTP服务器可以发送250 2.0.0 Ok并准备接收另一条消息。

如果客户端发送除quitrset以外的任何内容(或者如果您的SMTP服务器超时等待来自客户端的命令),您的服务器可以发送421 2.0.0 Bye和关闭插座。

答案 1 :(得分:0)

您应该在收到 quit 后发送 mail 或更多 250 以响应数据的结尾。 rset 和其他允许在 ehlo 之后的命令在这里也允许使用。

在发送数据负载后立即关闭可能会被拒绝,您应该等待 250 响应。这不是一件小事,基本上就是对消息的责任转移。

在收到 250 后关闭连接,但不发送 quit 不会导致任何数据丢失,但可能会浪费服务器上的磁盘,因为它可能会记录这种不规则行为。

相关问题