【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或新需求,欢迎在评论区交流~
