HOOOS

告别重复输入:Python邮件脚本密码安全存储与自动发送指南

0 5 代码界的Tony老师 Python邮件发送密码安全存储自动化脚本
Apple

你是不是也遇到过这样的烦恼:想用Python写个自动发邮件的脚本,结果每次运行都要手动输入邮箱密码,简直太麻烦了!而且,直接把密码写在代码里,总感觉不太安全,万一泄露了可就糟了。别担心,今天我就来分享几个安全又方便的方法,让你彻底告别手动输入密码的烦恼!

方法一:使用 keyring 模块安全存储密码

keyring 是一个专门用来存储和访问密钥的 Python 库,它会将密码存储在操作系统的密钥管理系统中,比如 Windows 的 Credential Manager、macOS 的 Keychain 等。这样,你的密码就不会明文出现在代码里,安全性大大提高。

安装 keyring:

pip install keyring

使用方法:

import keyring

# 设置密码
keyring.set_password("my_email_app", "your_email@example.com", "your_password")

# 获取密码
password = keyring.get_password("my_email_app", "your_email@example.com")

print(password)

代码解释:

  • keyring.set_password(service_name, username, password):用于设置密码,service_name 是你的应用名称,username 是你的邮箱地址,password 是你的邮箱密码。
  • keyring.get_password(service_name, username):用于获取密码,需要提供相同的 service_nameusername

完整示例:

import smtplib
from email.mime.text import MIMEText
import keyring

# 邮箱配置
sender_email = "your_email@example.com"
receiver_email = "recipient@example.com"
subject = "这是一封自动发送的邮件"
body = "邮件内容"

# 从 keyring 获取密码
password = keyring.get_password("my_email_app", sender_email)

# 构造邮件内容
message = MIMEText(body)
message['Subject'] = subject
message['From'] = sender_email
message['To'] = receiver_email

# 连接 SMTP 服务器并发送邮件
try:
    with smtplib.SMTP_SSL("smtp.example.com", 465) as server: # 替换为你的 SMTP 服务器地址和端口
        server.login(sender_email, password)
        server.sendmail(sender_email, receiver_email, message.as_string())
    print("邮件发送成功!")
except Exception as e:
    print(f"邮件发送失败: {e}")

注意事项:

  • 首次运行需要设置密码,之后就可以直接获取了。
  • 不同的操作系统,keyring 的后端存储方式可能不同,具体可以参考 keyring 的官方文档。

方法二:使用 dotenv 文件存储密码

.env 文件是一种常用的存储配置信息的文本文件,可以用来存储敏感信息,比如数据库密码、API 密钥等。我们可以把邮箱密码存储在 .env 文件中,然后使用 python-dotenv 库读取。

安装 python-dotenv:

pip install python-dotenv

创建 .env 文件:

在你的脚本所在的目录下创建一个名为 .env 的文件,内容如下:

EMAIL_ADDRESS=your_email@example.com
EMAIL_PASSWORD=your_password

使用方法:

import os
from dotenv import load_dotenv

# 加载 .env 文件
load_dotenv()

# 获取环境变量
email_address = os.getenv("EMAIL_ADDRESS")
email_password = os.getenv("EMAIL_PASSWORD")

print(email_address)
print(email_password)

代码解释:

  • load_dotenv():用于加载 .env 文件。
  • os.getenv(key):用于获取环境变量,key 是你在 .env 文件中定义的变量名。

完整示例:

import smtplib
from email.mime.text import MIMEText
import os
from dotenv import load_dotenv

# 加载 .env 文件
load_dotenv()

# 邮箱配置
sender_email = os.getenv("EMAIL_ADDRESS")
receiver_email = "recipient@example.com"
subject = "这是一封自动发送的邮件"
body = "邮件内容"

# 从 .env 文件获取密码
password = os.getenv("EMAIL_PASSWORD")

# 构造邮件内容
message = MIMEText(body)
message['Subject'] = subject
message['From'] = sender_email
message['To'] = receiver_email

# 连接 SMTP 服务器并发送邮件
try:
    with smtplib.SMTP_SSL("smtp.example.com", 465) as server: # 替换为你的 SMTP 服务器地址和端口
        server.login(sender_email, password)
        server.sendmail(sender_email, receiver_email, message.as_string())
    print("邮件发送成功!")
except Exception as e:
    print(f"邮件发送失败: {e}")

注意事项:

  • 确保将 .env 文件添加到 .gitignore 文件中,防止密码泄露到代码仓库。
  • .env 文件只应该在本地开发环境中使用,不要在生产环境中使用。

方法三:使用配置文件存储密码

除了 .env 文件,你还可以使用其他的配置文件格式,比如 JSON、YAML 等。这种方法更加灵活,可以存储更多的配置信息。

示例(使用 JSON):

创建一个名为 config.json 的文件,内容如下:

{
  "email_address": "your_email@example.com",
  "email_password": "your_password",
  "smtp_server": "smtp.example.com",
  "smtp_port": 465
}

使用方法:

import json

# 读取 JSON 文件
with open("config.json", "r") as f:
    config = json.load(f)

# 获取配置信息
email_address = config["email_address"]
email_password = config["email_password"]
smtp_server = config["smtp_server"]
smtp_port = config["smtp_port"]

print(email_address)
print(email_password)
print(smtp_server)
print(smtp_port)

完整示例:

import smtplib
from email.mime.text import MIMEText
import json

# 读取 JSON 文件
with open("config.json", "r") as f:
    config = json.load(f)

# 邮箱配置
sender_email = config["email_address"]
receiver_email = "recipient@example.com"
subject = "这是一封自动发送的邮件"
body = "邮件内容"

# 从配置文件获取密码
password = config["email_password"]
smtp_server = config["smtp_server"]
smtp_port = config["smtp_port"]

# 构造邮件内容
message = MIMEText(body)
message['Subject'] = subject
message['From'] = sender_email
message['To'] = receiver_email

# 连接 SMTP 服务器并发送邮件
try:
    with smtplib.SMTP_SSL(smtp_server, smtp_port) as server:
        server.login(sender_email, password)
        server.sendmail(sender_email, receiver_email, message.as_string())
    print("邮件发送成功!")
except Exception as e:
    print(f"邮件发送失败: {e}")

注意事项:

  • .env 文件一样,确保将配置文件添加到 .gitignore 文件中,防止密码泄露到代码仓库。
  • 可以根据需要选择不同的配置文件格式,比如 YAML、TOML 等。

安全建议

无论你选择哪种方法,以下安全建议都应该牢记:

  • 不要将密码直接写在代码中! 这是最危险的做法,一旦代码泄露,密码也会跟着泄露。
  • 使用强密码! 密码应该足够复杂,包含大小写字母、数字和特殊字符。
  • 定期更换密码! 定期更换密码可以降低密码泄露的风险。
  • 开启邮箱的两步验证! 两步验证可以大大提高邮箱的安全性,即使密码泄露,攻击者也无法轻易登录你的邮箱。
  • 限制脚本的权限! 确保脚本只能访问必要的资源,避免被恶意利用。

总结

以上就是几种安全又方便的 Python 邮件脚本密码存储方法。选择哪种方法取决于你的具体需求和偏好。记住,安全第一!希望这篇文章能帮助你解决问题,让你从此告别手动输入密码的烦恼!祝你编程愉快!

参考资料:

点评评价

captcha
健康