Smtplib not working with Env Variables and gets AttributeError: 'NoneType' object has no attribute 'encode'
Smtplib not working with Env Variables and gets AttributeError: 'NoneType' object has no attribute 'encode'
我尝试使用 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", 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
我知道问题不在于我的代码,因为我尝试用字符串替换电子邮件和密码,而不是程序访问环境变量。我正在使用 Ubunutu,而且我还尝试打印出 env 变量,它们确实显示为它应该是的字符串,而不是 None,所以我不确定为什么会出现此错误。
可能是因为 python 字符串和 env 变量之间的某种 ascii 编码格式?我只是抛出一些想法。
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")
其中一个环境变量未设置,因此 sender_email
和 password
中的一个或多个是 None
。这就是为什么 authobject(challenge).encode('ascii')
加注 'NoneType' object has no attribute 'encode
.
你声称你打印了变量,但它们不是 None
。在这种情况下,请确保您没有在代码中的其他地方用 None
覆盖这些变量之一(根据堆栈跟踪中的行号,您的示例中至少缺少 30 行代码).
我尝试使用 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", 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
我知道问题不在于我的代码,因为我尝试用字符串替换电子邮件和密码,而不是程序访问环境变量。我正在使用 Ubunutu,而且我还尝试打印出 env 变量,它们确实显示为它应该是的字符串,而不是 None,所以我不确定为什么会出现此错误。 可能是因为 python 字符串和 env 变量之间的某种 ascii 编码格式?我只是抛出一些想法。
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")
其中一个环境变量未设置,因此 sender_email
和 password
中的一个或多个是 None
。这就是为什么 authobject(challenge).encode('ascii')
加注 'NoneType' object has no attribute 'encode
.
你声称你打印了变量,但它们不是 None
。在这种情况下,请确保您没有在代码中的其他地方用 None
覆盖这些变量之一(根据堆栈跟踪中的行号,您的示例中至少缺少 30 行代码).