编写一个自动发送每日电子邮件报告的Python脚本

要编写一个自动发送每日电子邮件报告的Python脚本,你可以使用smtplib库来发送邮件,email库来构建邮件内容,并使用schedule或time库来设定每日的自动发送时间。以下是步骤以及如何设置这个脚本。

  1. 环境准备

    • 确保安装Python:推荐使用Python 3.6及以上版本。
    • 安装依赖库:
    • 如果需要使用调度任务的库schedule,可以用以下命令安装:

pip install schedule
  1. 编写 Python 脚本
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import schedule
import time

配置邮件服务器的设置

SMTP_SERVER = 'smtp.example.com'  # 例如:Gmail是 'smtp.gmail.com'
SMTP_PORT = 587  # 对于Gmail和大多数邮件服务是587
SMTP_USER = 'your_email@example.com'
SMTP_PASSWORD = 'your_password'

配置收件人、主题和内容

TO_EMAIL = 'recipient@example.com'
SUBJECT = '每日报告'
BODY = '这是自动发送的每日报告。'

def send_email():
    try:
        # 创建一个邮件对象
        msg = MIMEMultipart()
        msg['From'] = SMTP_USER
        msg['To'] = TO_EMAIL
        msg['Subject'] = SUBJECT

        # 添加邮件内容
        msg.attach(MIMEText(BODY, 'plain'))

        # 设置SMTP服务器并发送邮件
        with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server:
            server.starttls()  # 启动TLS加密
            server.login(SMTP_USER, SMTP_PASSWORD)
            server.send_message(msg)

        print("邮件发送成功!")
    except Exception as e:
        print(f"邮件发送失败: {e}")

# 使用schedule库来设定每日发送任务
def schedule_daily_email():
    # 设定每天的发送时间,比如早上9点发送
    schedule.every().day.at("09:00").do(send_email)

    print("开始等待每日发送任务...")
    while True:
        schedule.run_pending()
        time.sleep(60)  # 每60秒检查一次任务

# 直接调用发送函数进行测试
if __name__ == "__main__":
    # 运行调度任务
    schedule_daily_email()
  1. 详细步骤解释

    • 配置SMTP服务器:
    • 替换SMTP_SERVER和SMTP_PORT为你的邮件提供商的SMTP地址。例如:
    • Gmail: smtp.gmail.com,端口是587。
    • 替换SMTP_USER为你的电子邮件地址。
    • 替换SMTP_PASSWORD为你的邮件账户的密码。如果使用的是Gmail,需要创建应用专用密码,而不是使用普通密码。
    • 配置邮件内容:
    • 设置TO_EMAIL为你希望发送报告的收件人电子邮件。
    • SUBJECT是邮件主题,BODY是邮件正文内容。你可以根据需要修改这些内容。
    • 调度发送时间:
    • 使用schedule库,设定每天的发送时间,比如每天早上9点:

schedule.every().day.at("09:00").do(send_email)。
•   修改时间即可调整发送时间(24小时制)。
  1. 运行脚本

    • 将脚本保存为send_daily_report.py。
    • 在命令行中运行:

python send_daily_report.py

•   脚本会在后台运行,并在指定时间发送邮件。
  1. 部署和设置自动启动

    • 长期运行:
    • 在服务器上,你可以使用screen或tmux来保持脚本运行,确保即使断开SSH连接,脚本也能继续运行。
    • 示例使用screen:

screen -S email_report
python send_daily_report.py
# 按下Ctrl+A,然后D键来退出screen会话。
•   本地机器上自动启动:
•   如果希望在计算机启动时自动运行该脚本,可以使用操作系统的任务计划功能。
•   Windows: 使用“任务计划程序”创建一个任务,在启动时运行。
•   Linux/macOS: 使用crontab:
crontab -e

添加以下行,表示在系统启动时运行脚本:

@reboot python /path/to/send_daily_report.py
  1. 注意事项

    • 安全性: 避免在代码中硬编码密码。可以使用环境变量存储敏感信息,使用os.environ读取。
    • Gmail安全设置: 如果使用Gmail发送邮件,请确保开启“低安全应用访问”或使用应用专用密码,否则可能无法登录。
    • 调试: 如果邮件发送失败,检查端口、SMTP服务器、登录凭据,或者查看Python的异常输出,了解具体问题。

按照上述步骤和代码,你可以设置一个自动发送每日邮件报告的Python脚本。根据需求,修改报告内容和发送时间,以便满足实际需求。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容