我正在通过SMTP从PHP脚本发送电子邮件到Exim 4.71服务器。 服务器广告stream水线,所以我想利用它。 但是,当我读回返回代码时,我终于得到554 SMTP synchronization error 。 在服务器端的错误是:
SMTP protocol synchronization error (next input sent too soon: pipelining was advertised): rejected "DATA" H=(localhost) [111.111.111.111] next input="To: [email protected]\nDate: Wed, 12 Jun 2013 11:35:50 +1200\nReturn-Path: [email protected]\nSubject: Blablablablabla"
我想知道为什么它说“下一个input发送太快”。 我正在使用stream水线,所以应该被允许发送我的数据不等待任何东西。
请注意,当我不使用stream水线一切正常。
在发送实际的SMTP数据之前,您必须等待DATA动词的响应。 这样,如果服务器拒绝MAIL,RCPT(s)或DATA,则可以在将可能较大的消息体抽入pipe道之前退出事务。
使用stream水线不允许将所有东西都扔在pipe道上而不关心它,你仍然需要检查SMTP响应,并且有关什么动词必须是一起发送的集合中的最后一个的规则等。 stream水线RFC很好的解释它