Python Smtplib不使用环境变量并获取AttributeError:';非类型';对象没有属性';编码';
我曾尝试使用smtplib使用python发送电子邮件,但当我使用python dotenv隐藏用户名和密码时,电子邮件发送不起作用,我收到错误:Python Smtplib不使用环境变量并获取AttributeError:';非类型';对象没有属性';编码';,python,python-3.x,environment-variables,smtplib,Python,Python 3.x,Environment Variables,Smtplib,我曾尝试使用smtplib使用python发送电子邮件,但当我使用python dotenv隐藏用户名和密码时,电子邮件发送不起作用,我收到错误: Traceback (most recent call last): File "test.py", line 43, in <module> server.login(sender_email, password) File "/usr/lib/python3.6/smtplib.py&qu
Traceback (most recent call last):
File "test.py", line 43, in <module>
server.login(sender_email, password)
File "/usr/lib/python3.6/smtplib.py", line 721, in login
initial_response_ok=initial_response_ok)
File "/usr/lib/python3.6/smtplib.py", line 638, in auth
authobject(challenge).encode('ascii'), eol='')
AttributeError: 'NoneType' object has no attribute 'encode
其中一个环境变量未设置,因此一个或多个
sender\u email
和password
为None
。这就是为什么authobject(挑战).encode('ascii')
引发'NoneType'对象没有属性'encode
您声称您打印了变量,但它们不是
None
。在这种情况下,请确保不要在代码的其他地方使用None
覆盖这些变量之一(根据stacktrace中的行号,示例中至少缺少30行代码)。您好,感谢您的回答。我仔细检查了一遍,实际上我忘了检查我的password env变量,它原来是一个没有密码的变量。从我的项目中,我用py文件创建了一个本地文件.env,并将我的env变量保存在那里,但是当我从该本地.env文件中删除以前的一个env变量“USERNAME”时,出于某种原因,我仍然可以用py文件访问它。那么,这个env变量是否保存在我创建的本地.env文件之外的其他地方?
import smtplib, ssl
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from dotenv import load_dotenv, find_dotenv
import os
load_dotenv(find_dotenv())
sender_email = os.getenv("MY_EMAIL")
receiver_email = os.getenv("YOUR_EMAIL")
password = os.getenv("MY_PASSWORD")
message = MIMEMultipart("alternative")