Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python SMTP发送电子邮件时出现问题_Python_Email_Smtp_Smtplib - Fatal编程技术网

使用python SMTP发送电子邮件时出现问题

使用python SMTP发送电子邮件时出现问题,python,email,smtp,smtplib,Python,Email,Smtp,Smtplib,所以我很难找到这个错误是什么: 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 s

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

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("test@myserver.com", "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')
>>s.login(“test@myserver.com“,“密码”)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“C:\Program Files\Python27\lib\smtplib.py”,第608行,登录
引发SMTPAuthenticationError(代码,resp)
smtplib.SMTPAuthenticationError:(235,‘欢迎’)

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

也许你必须执行SMTP要求的其他设置。根据,由于您使用的是
ehlo
,因此可以通过更改
s.esmtp\u功能来执行此类设置

例如:

s.esmtp_features["auth"] = "LOGIN DIGEST-MD5" # changing the authentication method

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

典型的模式是:

C: AUTH LOGIN xxxx
S: 334 yyyy
C: zzzz
S: 235 welcome
其中,
C
表示客户端,
S
表示服务器,
xxxx
是base64编码的用户名,
yyy
是可忽略的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("test@myserver.com", "password")
code, resp = s.docmd('AUTH LOGIN', encode_base64('test@myserver.com'))
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)
参考:


您是否在
s.starttls()
之前调用了
s.ehlo()
?在本例中,是的,但即使我在ehlo之前调用starttls,我也会收到相同的错误。“235 2.7.0身份验证成功。对AUTH命令的响应表明身份验证成功。”-是的,但python会引发一个错误。感谢您的长篇大论。这真的很有帮助。不幸的是,它没有工作,因为我得到的str对象没有“get_payload”属性,或者可能有一种方法可以使用我的smtp服务器而不需要密码?我现在搞不清配置。有一个开放的SMTP是很酷的。