如何修复AttributeError:使用smtplib,“ NoneType”对象没有属性“ encode”

时间:2019-11-23 01:06:18

标签: python python-3.x

我试图制作一个脚本,以允许用户通过gmail发送文件内容。

这是我的代码:

if input1 == 'mail':
    path = input("open -- ")
    with open(path, "r") as file:
        addr = os.environ.get("email")
        pw = os.environ.get("pass")
        server = smtplib.SMTP("smtp.gmail.com", 587)
        server.ehlo()
        server.starttls()
        server.login(addr, pw)
        reading = file.read()
        subject = path
        body = reading
        msg = f'Subject {subject}\n\n{body}'
        input3 = ('recipient -- ')
        server.sendmail(email, input3, msg)'

这给了我这个错误:

  File "C:/Users/Whit/PycharmProjects/rps/venv/Scripts/maxnum.py", line 36, in <module>
    server.login(addr, pw)
  File "C:\Users\Whit\AppData\Local\Programs\Python\Python37-32\lib\smtplib.py", line 721, in login
    initial_response_ok=initial_response_ok)
  File "C:\Users\Whit\AppData\Local\Programs\Python\Python37-32\lib\smtplib.py", line 638, in auth
    authobject(challenge).encode('ascii'), eol='')
AttributeError: 'NoneType' object has no attribute 'encode'

3 个答案:

答案 0 :(得分:1)

您正在做server.login(addr, pw),但是通过环境变量获取addrpw。看来您实际上并没有像这样通过他们。

答案 1 :(得分:1)

通常在创建环境变量但忘记重新启动编辑器时发生。因此,只需重新启动即可解决问题。

答案 2 :(得分:0)

您提供给smtplib的某些值为None。我最有可能是对getent的一个或两个调用的结果。

如果未设置emailpass环境变量,您的程序应该做什么?在继续之前,您可能应该检查getent的结果。