当前位置:首页>python>Python 自动化:定时任务 + 报表自动生成 + 邮件发送(APScheduler)

Python 自动化:定时任务 + 报表自动生成 + 邮件发送(APScheduler)

  • 2026-10-11 08:43:55
Python 自动化:定时任务 + 报表自动生成 + 邮件发送(APScheduler)

每天手动跑报表太浪费时间?定时自动执行+生成Excel+发邮件,完全解放双手。

场景:每天固定时间自动生成报表并邮件发送。核心:APScheduler 定时、pandas 报表、smtplib 邮件、附件发送。

① 生成测试数据

import pandas as pdimport numpy as npdf = pd.DataFrame({    "date": pd.date_range("2025-04-01", periods=7),    "sales": np.random.randint(1000, 5000, 7)})df.to_excel("daily_report.xlsx", index=False)print(" daily_report.xlsx 已生成")
查看数据情况

② 核心代码(定时+发邮件)

import pandas as pdimport smtplibfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartfrom email.mime.base import MIMEBasefrom email import encodersfrom email.header import Headerdef send_report():    # 1. 读取并处理数据    df = pd.read_excel("daily_report.xlsx")    df.to_excel("自动报表.xlsx", index=False)    # 2. 配置邮箱信息 (请务必填入你的授权码)    sender = '发送方'    password = '你的QQ邮箱授权码' # 注意:不是登录密码,是SMTP授权码    receiver = '收件方'    # 3. 构建复合邮件容器 (关键修复点)    msg = MIMEMultipart() # 必须使用 MIMEMultipart 才能支持附件    # 3.1 添加邮件正文    text_body = MIMEText("今日销售数据报表请查收。", 'plain', 'utf-8')    msg.attach(text_body)    # 3.2 添加附件     filename = "自动报表.xlsx"    try:        with open(filename, "rb") as f: # 正确读取文件            part = MIMEBase('application', 'vnd.openxmlformats-officedocument.spreadsheetml.sheet')            part.set_payload(f.read())        # 编码附件        encoders.encode_base64(part)        # 设置附件头        part.add_header('Content-Disposition', 'attachment', filename=('utf-8', '', 'report.xlsx'))        msg.attach(part) # 将附件加入邮件容器        print(f"成功读取并加载附件: {filename}")    except FileNotFoundError:        print(f"错误:未找到文件 {filename},请检查文件路径。")        return    # 4. 设置邮件头信息    msg['From'] = sender    msg['To'] = receiver    msg['Subject'] = Header("每日销售自动报表", 'utf-8')    # 5. 发送邮件    try:        smtp_server = smtplib.SMTP('smtp.qq.com', 587)        smtp_server.starttls()        smtp_server.login(sender, password)        smtp_server.sendmail(sender, receiver, msg.as_string())        smtp_server.quit()        print("报表生成并邮件发送成功")    except Exception as e:        print(f"邮件发送失败: {e}")# 调用函数send_report()
输出信息,邮件发送成功

结果展示

自动生成 Excel 报表并模拟邮件发送,可配合 APScheduler 实现每日定时执行。

查看邮件信息,我的收件箱是 163邮箱。

总结

全流程自动化大幅提升效率,是职场数据分析必备效率神器,可无限扩展。

最新文章

随机文章