【Python实战】一键群发千人定制邮件!基于Excel+模板的自动化群发脚本
一、环境准备与安装
基础环境:Python 3.8+
安装依赖:一行命令搞定
pip install pandas openpyxl pyyaml
⚡ 二、三步极简上手
第一步:配置SMTP邮箱
编辑 config.yaml,填入你的邮箱和授权码(⚠️ 注意是授权码,不是登录密码!)
smtp:
server: smtp.qq.com # SMTP服务器地址
port: 465 # SMTP端口
username: your_email@qq.com # 邮箱账号
password: your_auth_code # 授权码
use_ssl: true # 开启SSL加密
sender:
name: 邮件群发系统 # 发件人显示名称
email: your_email@qq.com # 发件人邮箱
send:
interval: 3 # 发送间隔(秒),防封号必备
max_retries: 3 # 失败重试次数
batch_size: 10 # 每批发送数量
💡 常见邮箱SMTP配置速查:
- QQ邮箱:
smtp.qq.com,端口465,需在邮箱设置开启SMTP获取授权码- 163邮箱:
smtp.163.com,端口465,同理开启POP3/SMTP- Gmail:
smtp.gmail.com,端口465,需使用App Password
第二步:准备联系人和模板
1. 准备Excel (contacts.xlsx)
必填列为 email 和 name,其他列随意加,模板里都能用!
| name | company | course | deadline | |
|---|---|---|---|---|
| student1@xxx.com | 张三 | 某大学 | Python入门 | 2024-01-31 |
| student2@xxx.com | 李四 | 某公司 | 数据分析 | 2024-02-15 |
2. 编写邮件模板 (templates/course_notice.txt)
使用 {{字段名}} 语法,与Excel表头一一对应:
尊敬的{{name}}同学:
您好!您报名的【{{course}}】课程即将开课!
课程信息:
- 课程名称:{{course}}
- 报名截止:{{deadline}}
请尽快登录系统完成缴费,名额有限,先到先得!
{{sender_name}}
{{current_date}}
第三步:运行发送
# 1. 先发一封测试邮件给自己,确保配置无误
python email_sender.py --test your_email@qq.com
# 2. 正式批量群发
python email_sender.py \
--contacts contacts.xlsx \
--template course_notice \
--subject "【开课通知】{{course}}即将开课"
# 3. 需要带附件?没问题!
python email_sender.py \
--contacts customers.xlsx \
--template promotion \
--subject "【限时优惠】产品折扣活动" \
--attachments brochure.pdf price_list.xlsx
📖 三、进阶玩法详解
1. 邮件主题也支持个性化
不仅正文可以替换,--subject 参数同样支持模板语法:
python email_sender.py --subject "【专属优惠】{{name}}先生/女士,{{product}}限时折扣" ...
2. 内置系统变量
除了Excel里的自定义列,系统还内置了以下变量可直接使用:
{{email}}:收件人邮箱{{name}}:收件人姓名{{sender_name}}:发件人名称(读取配置文件){{current_date}}:当前日期
3. 命令行参数全览
| 参数 | 简写 | 说明 | 必填 |
|---|---|---|---|
--config |
-c |
配置文件路径 | ❌(默认config.yaml) |
--contacts |
-f |
联系人Excel文件路径 | ✅ |
--template |
-t |
邮件模板名称 | ✅ |
--subject |
-s |
邮件主题 | ✅ |
--attachments |
-a |
附件文件名列表 | ❌ |
--test |
- | 发送测试邮件 | ❌ |
🚨 四、踩坑避雷指南(FAQ)
❌ 问题1:SMTPAuthenticationError: 535 Login Fail
👉 解决:99%是因为用了登录密码而不是授权码!请去邮箱设置里生成独立的SMTP授权码。
❌ 问题2:发送几封后就连不上/报错 421
👉 解决:发送频率太高被服务商限制了。修改 config.yaml 中的 interval: 5(增大间隔),减小 batch_size。
❌ 问题3:ValueError: Excel文件缺少必需列
👉 解决:检查Excel的第一行表头,必须包含英文的 email 和 name,且不要有空格。
🔒 五、安全与合规提示
作为技术人,用技术提效的同时也要守规矩:
- 勿硬编码密码:不要把邮箱密码写在代码里,建议使用环境变量或配置文件(并加入
.gitignore)。 - 合规发送:确保收件人是自愿接收邮件,邮件内容需合法合规,避免触发反垃圾邮件机制(如:少用夸张词汇、提供退订方式)。
- 数据安全:客户的Excel数据妥善保管,切勿上传至开源仓库!
🌟 总结
这个脚本轻量、实用,完美解决了日常运营中“批量又需定制”的邮件发送痛点。如果你也在做社群运营、培训机构或者客户维护,这个工具绝对能帮你省下无数个加班的夜晚!
系统完整源代码和文档地址:https://download.csdn.net/download/wjianwei666/92858004
如果觉得有用,别忘了点赞👍收藏⭐支持一下!有任何Bug或新需求,欢迎在评论区交流~
更多推荐
所有评论(0)