
10年青少年编程教育经验 | 资深Python专家
前大厂技术总监 | 现编程教育创业者
专注青少年编程教育技能提升

大家好,我是浩浩学编程的方老师,这是excel办公自动化系列的第22课。
今日技能
📱 一文给大家快速掌握定时操作的能力
深夜十点的办公室
小叶盯着电脑屏幕,眼睛已经开始发酸。
桌面上摊着 20 多个 Excel 文件,邮箱里躺着 50 多封待发送的邮件 —— 这是这个月的销售报表,每个区域经理一份,每个人的附件都不一样,邮件内容还要个性化称呼。
打开 Excel → 筛选对应区域数据
另存为新文件 → 打开邮箱
输入收件人 → 写邮件正文
添加附件 → 发送 → 下一个
"啪嗒"—— 又发错了,把华东区的报表发给了华南区经理。
小叶懊恼地拍了下额头,这已经是今天第 3 个错误了。
重复、枯燥、容易出错、消耗时间却没有任何成长。
这就是很多职场新人的日常:
每天 80% 的时间花在机械劳动上,真正用来思考、学习、创造价值的时间,少得可怜。
"其实这些工作,3 行代码就能搞定。"
路过的平叔看到小叶的窘境,给她展示了一个神奇的脚本
—— 运行之后,50 封带 Excel 附件的邮件,3 分钟全部自动发送完毕,零错误。
小叶惊呆了。
这就是今天要分享的神器:Python + pandas + smtplib 自动化邮件发送方案。
不需要复杂的编程基础,只要跟着步骤复制粘贴,你也能做到。
先上完整代码,每一行都有详细注释,小白也能看懂:
# ==============================================# Python自动发送带Excel附件的邮件 - 完整代码# 作者:平叔的职场课堂# 适用场景:批量发送个性化Excel报表# ==============================================# ------------- 第一步:导入需要的库 -------------import pandas as pd # 处理Excel数据import smtplib # 发送邮件from email.mime.text import MIMEText # 邮件正文from email.mime.multipart import MIMEMultipart # 邮件主体from email.mime.application import MIMEApplication # 附件import os# ------------- 第二步:配置邮箱信息 -------------# 【重要提醒】这里需要改成你自己的邮箱信息!EMAIL_CONFIG = {"sender": "your_email@company.com", # 发件人邮箱"password": "your_password", # 邮箱密码/授权码"smtp_server": "smtp.company.com", # SMTP服务器"smtp_port": 587, # SMTP端口}# ------------- 第三步:读取Excel数据 -------------# 假设我们有一个总表,包含所有人员的数据df = pd.read_excel("销售总表.xlsx")# 按区域分组,每个区域生成一个单独的Excelregions = df["区域"].unique()# ------------- 第四步:批量生成Excel并发送邮件 -------------for region in regions:# 1. 筛选当前区域的数据region_data = df[df["区域"] == region]# 2. 生成区域专属Excel文件filename = f"{region}销售报表.xlsx"region_data.to_excel(filename, index=False)# 3. 获取该区域经理的邮箱(实际可以从通讯录Excel读取)# 这里简化演示,实际建议建一个"区域-邮箱"对照表email_map = {"华东区": "huadong@company.com","华南区": "huanan@company.com","华北区": "huabei@company.com","西南区": "xinan@company.com",}receiver = email_map.get(region, "default@company.com")# 4. 构造邮件msg = MIMEMultipart()msg["From"] = EMAIL_CONFIG["sender"]msg["To"] = receivermsg["Subject"] = f"【重要】{region}5月份销售报表"# 5. 邮件正文(支持HTML格式!)body = f"""<html><body><p>尊敬的{region}经理:</p><p>您好!附件是5月份的销售报表,请查收。</p><p>如有问题请随时联系。</p><br><p>此致</p><p>销售部 小叶</p></body></html>"""msg.attach(MIMEText(body, "html", "utf-8"))# 6. 添加Excel附件with open(filename, "rb") as f:attach = MIMEApplication(f.read())attach.add_header("Content-Disposition", "attachment", filename=filename)msg.attach(attach)# 7. 发送邮件try:server = smtplib.SMTP(EMAIL_CONFIG["smtp_server"], EMAIL_CONFIG["smtp_port"])server.starttls() # 启用TLS加密server.login(EMAIL_CONFIG["sender"], EMAIL_CONFIG["password"])server.sendmail(EMAIL_CONFIG["sender"], receiver, msg.as_string())server.quit()print(f"✅ {region} 邮件发送成功!")except Exception as e:print(f"❌ {region} 邮件发送失败:{str(e)}")# 8. (可选)删除临时生成的Excel文件# os.remove(filename)print("\n🎉 所有邮件发送完成!")
打开命令提示符,输入:
pip install pandas openpyxl就这么简单,两个库搞定。
不同邮箱的 SMTP 配置:
QQ 邮箱:smtp.qq.com,端口 587,需要用 "授权码" 而非密码
163 邮箱:smtp.163.com,端口 465
企业邮箱:问 IT 部门要 SMTP 地址
💡 重要提示:QQ 邮箱需要在设置里开启 "SMTP 服务",获取授权码。
pandas 的强大之处在于:
一键读取大文件 Excel
按条件筛选、分组、汇总
自动生成多个子文件
原来需要半小时的人工拆分,现在 1 秒钟完成。
支持 HTML 富文本正文(可以加颜色、格式、图片)
自动添加附件,文件名不乱码
批量发送,每封邮件都可以个性化
很多人担心:AI 和自动化工具会不会取代职场人?
方老师常说:工具不会淘汰职场人,但会用工具的职场人,正在淘汰不会用的。
想想看:
别人花 3 小时发邮件,你花 3 分钟
别人加班做报表,你准点下班
别人在机械劳动,你把时间花在数据分析、业务思考上
谁的成长更快?谁更有竞争力?答案不言而喻。
工具从来都不是威胁,而是放大器。
它放大你的能力,放大你的效率,放大你的时间价值。
今天学会的这一个小技能,可能就是你职场超车的起点。
小叶用这个脚本,以前要加班到 11 点的工作,现在下班前 5 分钟就能搞定。
省下来的时间,她用来学习数据分析,做业务复盘,半年后就晋升成了主管。
职场从来都不是比谁更能加班,而是比谁更聪明地工作。
从今天开始,做一个会用工具的职场人。
一句话总结:让 Python 帮你做重复的事,把时间留给更有价值的工作。
觉得有用?点赞收藏,支持方老师一下!
有问题欢迎留言讨论,我会一一解答 👇
方老师说: 🚀 现在屏幕前的你已经比90%的同龄人领先一步了!
接下来可以:
介绍一下用邮件自动发送Excel文件(下期教程教!)
⚠️ 遇到问题?评论区甩截图,方老师尽量在24小时内回复!