我看过过去的线程,但据我所知,没有一个解决方案适合我。我的代码如下:
import smtplib
import config
EMAIL_ADDRESS = '***'
EMAIL_PASSWORD = '***'
if re.search(pattern, body) is None:
def send_email(subject, msg):
try:
server = smtplib.SMTP('smtp-mail.outlook.com:587')
server.ehlo()
server.starttls()
server.login(config.EMAIL_ADDRESS, config.EMAIL.PASSWORD)
message = 'Subject: {}nn{}'.format(subject, msg)
server.sendmail(config.EMAIL_ADDRESS, '***@gmail.com', message)
server.quit()
print("email sent ツ")
您正在观看的教程告诉您创建一个名为config.py
的文件,并将EMAIL_ADDRESS
和EMAIL_PASSWORD
的定义放在其中。但是,您似乎将这些定义与其他所有内容放在同一个脚本中。
这是可以的,但是如果您要这样做,则不需要将import config
放在代码的顶部。您也不需要在每次引用变量名称时将config.
放在它们的前面。
工作代码看起来像这样:
import smtplib
EMAIL_ADDRESS = "***"
EMAIL_ADDRESS2 = "***"
EMAIL_PASSWORD = "***"
def send_email(subject, msg):
try:
server = smtplib.SMTP("smtp-mail.outlook.com:587")
server.ehlo()
server.starttls()
server.login(EMAIL_ADDRESS, EMAIL_PASSWORD)
message = f"Subject: {subject}nn{msg}"
server.sendmail(EMAIL_ADDRESS, EMAIL_ADDRESS2, message)
server.quit()
print("email sent ツ")
except:
print("Email failed to send :(")
然而,将密码等敏感信息放在Python脚本中并不是一个好主意,以防您与其他人共享它们,而忘记了您已经这样做了。
本教程建议创建一个名为config.py
的单独Python文件来存储它,但这实际上并不是通常的方法。
隐藏信息的常用方法是将其放在与主脚本相同目录下的一个名为.env
的文件中,并将信息从代码中取出。
使用.env
文件是因为它是存储环境变量的常规方式。
如果你想这样做(这可能是最好的选择),那么你必须这样做:
- 在与主脚本相同的目录下创建一个名为
.env
的文件,并填写如下信息:
(请注意,您不需要语音标记)EMAIL_ADDRESS=*** EMAIL_ADDRESS2=*** EMAIL_PASSWORD=***
- 使用以下命令安装
dotenv
模块:pip install python-dotenv
修改你的代码,从环境文件中获取值,而不是在脚本中定义变量:
import smtplib
import os
from dotenv import load_dotenv
load_dotenv()
EMAIL_ADDRESS = os.getenv("EMAIL_ADDRESS")
EMAIL_ADDRESS2 = os.getenv("EMAIL_ADDRESS2")
EMAIL_PASSWORD = os.getenv("EMAIL_PASSWORD")
def send_email(subject, msg):
try:
server = smtplib.SMTP("smtp-mail.outlook.com:587")
server.ehlo()
server.starttls()
server.login(EMAIL_ADDRESS, EMAIL_PASSWORD)
message = f"Subject: {subject}nn{msg}"
server.sendmail(EMAIL_ADDRESS, EMAIL_ADDRESS2, message)
server.quit()
print("email sent ツ")
except:
print("Email failed to send :(")
要了解有关dotenv
的更多信息,请参阅其官方PyPI页面。