Excel 30天极速自救指南 | Day 11:我和我的那些“一次性”朋友——用Python发邮件
“每次群发邮件都要复制粘贴收件人?每次发工资条都要一个个点发送?那些‘一次性朋友’耗尽了你的职场耐心。”
大家好,我是你们那位“能自动群发,绝不手动抄送”的博主。
今天是我们30天自救计划的第十一天,Python周的第四课。
前三天,我们让Python帮我们处理数据、生成报表。但有一个动作,依然是手动完成的——
把报表发给老板/同事/客户。
你有没有这样的经历:
-
做完了报表,保存文件 -
打开邮箱,新建邮件 -
输入收件人(有时候还要从通讯录里找半天) -
添加附件,写几句客套话 -
点击发送
一次两次还好,如果每天都要发,或者一次发给几十个人(比如工资条、周报群发),那就是慢性自杀。
今天,我教你用Python写个脚本,让电脑替你自动发邮件。你只需要双击运行,然后看着屏幕上一行行“发送成功”,享受当“甩手掌柜”的快感。
场景导入:那个发工资条的下午
假设你是公司的行政/HR。每个月发工资条,你要:
-
从Excel里导出每个人的工资数据 -
每个人单独生成一个PDF或图片 -
打开邮箱,一封一封地写邮件 -
上传附件,检查收件人,发送 -
重复50遍……
一个下午过去了,眼睛花了,手指麻了,还担心有没有发错人。

手动群发工资条的绝望
现在的你:写一个Python脚本,让电脑自动登录你的邮箱,自动读取Excel里的收件人名单和工资数据,自动生成个性化邮件,自动发送……然后你泡杯咖啡,看着进度条跑完。
准备工作:开启邮箱的“SMTP服务”
要让Python帮你发邮件,需要先给你的邮箱开一个“权限”——允许第三方程序通过SMTP服务器发送邮件。
以QQ邮箱为例(其他邮箱类似):
-
登录QQ邮箱网页版 -
点击“设置” → “账户” -
往下拉,找到 “POP3/IMAP/SMTP服务” -
点击“开启”(可能需要手机验证) -
开启后会生成一个授权码(不是你的QQ密码!),复制下来保存好

这个授权码就是Python登录你邮箱的“钥匙”。
第一步:让AI帮我们写发邮件脚本
打开ChatGPT,输入以下指令(继续用我们的“五要素模板”):
“我是一个Python初学者。我想写一个脚本,用QQ邮箱自动发送邮件。我准备好了授权码。请帮我写一个脚本,能实现:
登录我的QQ邮箱
发送一封测试邮件给我自己(收件人也是我)
邮件包含主题、正文,还可以添加附件
给我完整的代码,每行加注释,并告诉我怎么安装需要的库”
AI会给你类似这样的代码:
python
import smtplibfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextfrom email.mime.base import MIMEBasefrom email import encodersimport os# ========== 配置区 ==========# 邮箱设置SMTP服务器 = 'smtp.qq.com'SMTP端口 = 587# 常用端口:587(TLS)或465(SSL)发件人邮箱 = '你的QQ号@qq.com'授权码 = '你的16位授权码'# 不是密码!# 邮件内容收件人邮箱 = '收件人@example.com'邮件主题 = '这是Python自动发送的测试邮件'邮件正文 = '''你好!这是用Python脚本自动发送的邮件。如果你收到了,说明脚本运行成功!祝好,你的Python机器人'''# 附件路径(如果需要)附件路径 = ''# 留空表示不发送附件# ============================# 创建邮件对象msg = MIMEMultipart()msg['From'] = 发件人邮箱msg['To'] = 收件人邮箱msg['Subject'] = 邮件主题# 添加正文msg.attach(MIMEText(邮件正文, 'plain', 'utf-8'))# 添加附件(如果有)if 附件路径 and os.path.exists(附件路径):with open(附件路径, 'rb') as f: part = MIMEBase('application', 'octet-stream') part.set_payload(f.read()) encoders.encode_base64(part) part.add_header('Content-Disposition',f'attachment; filename="{os.path.basename(附件路径)}"' ) msg.attach(part)# 发送邮件try:# 连接SMTP服务器 server = smtplib.SMTP(SMTP服务器, SMTP端口) server.starttls() # 启用TLS加密 server.login(发件人邮箱, 授权码) server.send_message(msg) server.quit() print("✅ 邮件发送成功!")except Exception as e: print(f"❌ 邮件发送失败:{e}")
第二步:测试发送
-
把上面的代码复制到一个新文件,比如 send_email.py -
修改配置区: -
填上你的QQ邮箱和授权码 -
收件人可以先填自己(测试用) -
打开命令提示符,运行 python send_email.py
如果一切顺利,你会看到 “✅ 邮件发送成功!”,然后去邮箱看看,是不是收到了?

批量发送成功现场
第三步:进阶——群发工资条/报表
上面只是单个发送。真正的大杀器是批量发送。
假设你有一个Excel文件 工资条.xlsx,里面有这些列:
|
姓名 |
邮箱 |
基本工资 |
绩效 |
扣款 |
实发 |
|
张三 |
zhangsan@example.com |
5000 |
1000 |
200 |
5800 |
|
李四 |
lisi@example.com |
6000 |
800 |
100 |
6700 |
|
… |
… |
… |
… |
… |
… |
你想给每个人发一封邮件,内容里包含他自己的工资数据,还能附上PDF工资条。
让AI帮我们写个脚本:
“我有一个Excel文件‘工资条.xlsx’,里面有‘姓名’、‘邮箱’、‘基本工资’、‘绩效’、‘扣款’、‘实发’列。我想写一个Python脚本,遍历每一行,给每个人的邮箱发送一封工资条邮件,邮件正文里包含他个人的工资数据。同时,如果有PDF文件(比如以‘姓名.pdf’命名),也作为附件发送。请给我完整代码。”
AI会生成类似这样的脚本(简化版):
python
import pandas as pdimport smtplibfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextfrom email.mime.base import MIMEBasefrom email import encodersimport os# ========== 配置区 ==========SMTP服务器 = 'smtp.qq.com'SMTP端口 = 587发件人邮箱 = '你的QQ号@qq.com'授权码 = '你的16位授权码'Excel文件 = '工资条.xlsx'附件文件夹 = '工资条PDF'# 存放PDF的文件夹# ============================# 读取Exceldf = pd.read_excel(Excel文件)# 连接邮箱服务器server = smtplib.SMTP(SMTP服务器, SMTP端口)server.starttls()server.login(发件人邮箱, 授权码)# 遍历每一行for index, row in df.iterrows(): 姓名 = row['姓名'] 收件人 = row['邮箱'] 基本工资 = row['基本工资'] 绩效 = row['绩效'] 扣款 = row['扣款'] 实发 = row['实发']# 创建邮件 msg = MIMEMultipart() msg['From'] = 发件人邮箱 msg['To'] = 收件人 msg['Subject'] = f'{姓名}的工资条 - 2026年2月'# 正文 正文 = f'''{姓名},你好!这是你的2026年2月工资条:基本工资:{基本工资}绩效:{绩效}扣款:{扣款}实发金额:{实发}如有疑问,请联系财务部。此邮件由系统自动发送,请勿回复。 ''' msg.attach(MIMEText(正文, 'plain', 'utf-8'))# 添加PDF附件(如果有) pdf_path = os.path.join(附件文件夹, f'{姓名}.pdf')if os.path.exists(pdf_path):with open(pdf_path, 'rb') as f: part = MIMEBase('application', 'octet-stream') part.set_payload(f.read()) encoders.encode_base64(part) part.add_header('Content-Disposition', f'attachment; filename="{姓名}.pdf"') msg.attach(part)# 发送 server.send_message(msg) print(f'✅ 已发送给 {姓名} ({收件人})')# 关闭连接server.quit()print('所有邮件发送完毕!')

同事围观的崇拜现场
运行这个脚本,几十封工资条邮件,几分钟自动发完。而且绝对不会有手误发错的情况。
⚠️ 注意事项(避坑指南)
- 不要频繁大量发送
:邮箱服务商有发送频率限制,比如一小时最多发几十封。如果超过限制,可能会暂时封禁。建议分批发送,或者使用企业邮箱。 - 授权码别泄露
:这个脚本里包含你的授权码,不要随便发给别人。如果泄露,及时在邮箱设置里重置授权码。 - 测试先行
:先发给自己的另一个邮箱测试,确认格式、附件都没问题,再批量发。 - 正文编码
:用 ‘plain’, ‘utf-8’ 避免中文乱码。
今日“捣乱作业”
作业题目:用Python给你的小伙伴(或者你自己)发一封自动邮件。
操作步骤:
-
开启邮箱SMTP服务,拿到授权码 -
让AI帮你写一个发邮件的脚本(或者用上面的模板) -
修改配置,发一封测试邮件给自己 -
截图命令提示符里的“发送成功”和邮箱里收到的邮件,发评论区
挑战版:做一个“批量发送”脚本。准备一个Excel文件,里面有几个人名和邮箱,让Python给每个人发一封不同的邮件(比如每个人收到自己的专属问候语)。截图运行过程和收到的邮件。
今日金句
“手动发邮件是劳动密集型产业,自动发邮件是技术密集型摸鱼。”
博主碎碎念
今天你学会了如何让Python替你发邮件。
从今以后,周报、月报、工资条、节日问候……所有这些重复性的发送工作,都可以交给脚本。你只需要坐在工位上,假装在忙,实际上看着邮件一封封自动飞出去。
明天Day 12,我们将学习《批量改名、改格式、改内容……Python就像给文件施魔法》。教你用Python批量处理文件名、格式转换、内容替换,彻底告别“右键重命名”的原始时代。
评论区交给你:你最想用自动邮件做什么?群发周报?发工资条?还是给前任发早安?
点击关注,每天学一招,让Python给你打工!
#Python教学 #自动发邮件 #告别手动 #工资条神器 #效率翻倍
P.S. 今天的作业如果成功了,以后群发邮件再也不用一个个点发送了。你的手指可以留出来,多敲几行代码,再偷更多的懒。
夜雨聆风
