擅长:python、mysql、java
< Python 2.7 .x由于指定的空白CMD将发送NTLM类型3消息失败:</P>
<p><code>code, response = smtp.docmd("", ntlm_message)</code></p>
<p>这最终会将正确的响应发送回服务器,但是由于docmd()调用putcmd()的性质,它会预先挂起一个空格。</p>
<p>smtplib.py版本:</p>
<pre><code>def putcmd(self, cmd, args=""):
"""Send a command to the server."""
if args == "":
str = '%s%s' % (cmd, CRLF)
else:
str = '%s %s%s' % (cmd, args, CRLF)
self.send(str)
# ...
def docmd(self, cmd, args=""):
"""Send a command, and return its response code."""
self.putcmd(cmd, args)
return self.getreply()
</code></pre>
<p>其结果是采用else条件的路径,从而发送<code>str(' ' + ntlm_message + CRLF)</code>,从而产生<code>(501, 'Syntax error in parameters or arguments')</code>。</p>
<p>因此,修复方法只是将NTLM消息作为cmd发送。</p>
<p><code>code, response = smtp.docmd(ntlm_message)</code></p>
<p>已提交对上述答案的修订,但谁知道何时将对其进行审查/接受。</p>