所以我很难找到这个错误是什么:

smtplib.SMTPAuthenticationError: (235, 'welcome')


我找不到一个明确的答案,哪里有235。

因此,我按照以下方式进行操作:

s = smtplib.SMTP()
s.connect("smtp.myserver.com", 25)


答复为(220,'欢迎使用9x SMTP服务器')

然后我做:

s.ehlo()


然后回来

(250, 'p3\nAUTH LOGIN\nHELP')


我这样做是因为服务器不支持starttls

smtplib.SMTPException: STARTTLS extension not supported by server.


然后,我尝试登录:

>>> s.login("[email protected]", "password")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Program Files\Python27\lib\smtplib.py", line 608, in login
    raise SMTPAuthenticationError(code, resp)
smtplib.SMTPAuthenticationError: (235, 'welcome')


我不知道235是什么意思,但是我得到了欢迎字符串。我真的很困惑,我100%确定我的凭据正确无误。

最佳答案

您的服务器对AUTH LOGIN命令的响应是非典型的,甚至可能是非标准的。

典型的模式是这样的:

C: AUTH LOGIN xxxx
S: 334 yyyy
C: zzzz
S: 235 welcome


其中C表示客户端,S表示服务器,xxxx是base64编码的用户名,yyyy是可忽略的base64编码的字符串,而zzzz是base64编码的密码。

您的服务器正在执行此操作:

C: AUTH LOGIN xxxx
S: 235 welcome


无论出于何种原因,您的服务器似乎都不会对密码感兴趣。

我不知道您可能需要在服务器上进行哪些配置更改。如果您有兴趣修改smtplib.py,请查找以下代码:

    elif authmethod == AUTH_LOGIN:
        (code, resp) = self.docmd("AUTH",
            "%s %s" % (AUTH_LOGIN, encode_base64(user, eol="")))
        if code != 334:
            raise SMTPAuthenticationError(code, resp)
        (code, resp) = self.docmd(encode_base64(password, eol=""))


然后尝试这样的事情:

    # UNTESTED
    elif authmethod == AUTH_LOGIN:
        (code, resp) = self.docmd("AUTH",
            "%s %s" % (AUTH_LOGIN, encode_base64(user, eol="")))
        if code == 334:
            (code, resp) = self.docmd(encode_base64(password, eol=""))
        elif code != 235:
            raise SMTPAuthenticationError(code, resp)


另一方面,修改程序可能更有意义。尝试这个:

#s.login("[email protected]", "password")
code, resp = s.docmd('AUTH LOGIN', encode_base64('[email protected]'))
if code==334:
    # Probably won't happen on "the 9x SMTP Server"
    code, resp = s.docmd(encode_base64('password'), '')
if code!=235:
    raise smtplib.SMTPAuthenticationError(code, resp)


参考:


http://msdn.microsoft.com/en-us/library/cc433484(v=exchg.80).aspx
https://docs.python.org/2/library/smtplib.html#smtplib.SMTP.docmd

10-06 09:10