影刀RPA 邮件合并:批量发送个性化邮件的完整方案
影刀RPA 邮件合并批量发送个性化邮件的完整方案作者林焱需要给客户发500封邮件每封的内容不一样收件人姓名、金额、订单号都不同。这就是邮件合并——用模板数据源自动生成个性化邮件并发送。邮件合并的三要素模板邮件的骨架固定部分数据源Excel或数据库里的个性化数据变量部分合并引擎Python代码把模板和数据组装成最终邮件店群矩阵自动化突破运营极限基于Excel数据源的邮件合并importopenpyxlimportsmtplibfromemail.mime.textimportMIMETextfromemail.mime.multipartimportMIMEMultipart# 读取数据源defload_recipients(excel_path):wbopenpyxl.load_workbook(excel_path)wswb.active headers[cell.valueforcellinws[1]]recipients[]forrowinws.iter_rows(min_row2,values_onlyTrue):recipients.append(dict(zip(headers,row)))returnrecipients# 邮件模板template 尊敬的{姓名} 您好 您在{日期}的订单订单号{订单号}已发货预计{预计到达}送达。 订单详情 - 商品{商品名称} - 数量{数量} - 金额¥{金额} 物流单号{物流单号} 如有问题请联系客服。 祝好 # 发送defsend_merged_emails(recipients,template,smtp_config):forpersoninrecipients:# 填充模板bodytemplate.format(**person)msgMIMEMultipart()msg[Subject]f订单{person[订单号]}发货通知msg[From]smtp_config[from_email]msg[To]person[邮箱]msg.attach(MIMEText(body,plain,utf-8))withsmtplib.SMTP_SSL(smtp_config[server],smtp_config[port])ass:s.login(smtp_config[from_email],smtp_config[password])s.sendmail(smtp_config[from_email],person[邮箱],msg.as_string())print(f已发送{person[姓名]}({person[邮箱]}))time.sleep(2)# 控制发送频率避免被限# 使用smtp_config{server:smtp.qq.com,port:465,from_email:yourqq.com,password:授权码}recipientsload_recipients(客户名单.xlsx)send_merged_emails(recipients,template,smtp_config)带附件的邮件合并fromemail.mime.baseimportMIMEBasefromemailimportencodersdefsend_with_attachment(person,template,attachment_path,smtp_config):msgMIMEMultipart()msg[Subject]f您的账单-{person[姓名]}msg[From]smtp_config[from_email]msg[To]person[邮箱]# 正文bodytemplate.format(**person)msg.attach(MIMEText(body,plain,utf-8))# 附件withopen(attachment_path,rb)asf:partMIMEBase(application,octet-stream)part.set_payload(f.read())encoders.encode_base64(part)part.add_header(Content-Disposition,fattachment; filename{person[姓名]}_账单.pdf)msg.attach(part)# 发送withsmtplib.SMTP_SSL(smtp_config[server],smtp_config[port])ass:s.login(smtp_config[from_email],smtp_config[password])s.sendmail(smtp_config[from_email],person[邮箱],msg.as_string())错误处理与重试defsafe_send(recipients,template,smtp_config,max_retries3):success[]failed[]forpersoninrecipients:forattemptinrange(max_retries):try:send_merged_emails([person],template,smtp_config)success.append(person)breakexceptExceptionase:ifattemptmax_retries-1:person[error]str(e)failed.append(person)![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/3d59c4ac4c7d47ffb9f74dd40027e73d.png#pic_center)time.sleep(5)# 等5秒再重试time.sleep(1)# 发送间隔# 生成发送报告print(f发送完成成功{len(success)}失败{len(failed)})iffailed:withopen(发送失败列表.txt,w)asf:forpinfailed:f.write(f{p[姓名]}{p[邮箱]}:{p.get(error,未知错误)}\n)returnsuccess,failed踩坑实录坑1str.format()和花括号冲突如果你的邮件模板里有{}比如JSON数据str.format()会把它当成占位符导致报错。转义花括号{{表示{}}表示}。temu店群自动化报活动案例坑2SMTP发送频率限制QQ邮箱限制每小时发送量、每分钟发送量。大量发送邮件可能会触发临时封禁。建议每条间隔2-3秒每小时不超过50封。如果量大用企业邮箱或SendCloud等服务。坑3收件人邮箱无效导致发送中断某个收件人的邮箱不存在或格式错误整个流程会卡住。用try/except包住每条发送记录失败的继续下一条。坑4邮件被标记为垃圾邮件原因包括短时间内大量发送、邮件内容包含大量链接、From地址没有SPF/DKIM记录。解决方法发送间隔不要太密内容少用链接和图片使用企业邮箱而非个人免费邮箱写在最后邮件合并是客户运营和内部通知的利器。影刀负责把最新数据写入ExcelPython负责读取数据并发送个性化邮件——你只需要维护好模板和数据源剩下的全自动。

相关新闻

Jaws:从零构建一个”五脏俱全”的 Java RPC 框架

Jaws:从零构建一个”五脏俱全”的 Java RPC 框架

在 Java RPC 的世界里,Dubbo 和 gRPC 早已是家喻户晓的名字。但当你真正去读它们的源码时,往往会陷入几十万行代码的汪洋——核心逻辑被淹没在大量的兼容性代码、扩展点和历史包袱中。 如果你渴望有一个 RPC 框架,代码量可控、架构清晰、每一…

2026/7/25 5:52:15阅读更多 →
Java后端面试题大全(整理版·附答案详解),最全面详细

Java后端面试题大全(整理版·附答案详解),最全面详细

Java 面试 Java 作为编程语言中的 NO.1,选择入行做 IT 做编程开发的人,基本都把它作为首选语言,进大厂拿高薪也是大多数小伙伴们的梦想。以前 Java 岗位人才的空缺,而需求量又大,所以这种人才供不应求的现状,就是 Java 工程师的薪…

2026/7/25 5:52:15阅读更多 →
042-学英语二语法的费曼式理解

042-学英语二语法的费曼式理解

费曼学习法系列 第042篇 用费曼学习法学英语(二):语法的费曼式理解 一、语法不是规则,是"语言的使用习惯" 大多数人在学校学的语法是一套"规则体系":第三人称单数加s、过去式加ed、现在完成时用have+过去分词……这些规则越积越多,到后来你发现总…

2026/7/25 5:50:14阅读更多 →
C++内存碎片问题解析:从原理到实战解决方案

C++内存碎片问题解析:从原理到实战解决方案

1. 项目概述:为什么C开发者必须直面内存碎片在C开发这条路上,无论你是刚入门的新手,还是已经写了几年业务逻辑的熟手,迟早有一天会撞上“内存碎片”这堵墙。它不是那种会让程序立刻崩溃的显性错误,更像是一种慢性病——…

2026/7/25 7:24:29阅读更多 →
浙大C++实战作业:从语法到项目,夯实编程核心能力

浙大C++实战作业:从语法到项目,夯实编程核心能力

1. 项目概述:一份来自浙大的C编程实战宝典如果你正在学习C,尤其是处于从“看懂语法”到“能写程序”这个关键爬坡期,那么一份高质量的实战作业合集,其价值可能远超任何一本教科书。今天要聊的,就是一份源自浙江大学课程…

2026/7/25 7:24:29阅读更多 →
Bili2Text终极指南:一键将B站视频转为可编辑文字稿的完整解决方案

Bili2Text终极指南:一键将B站视频转为可编辑文字稿的完整解决方案

Bili2Text终极指南:一键将B站视频转为可编辑文字稿的完整解决方案 【免费下载链接】bili2text Bilibili视频转文字,一步到位,输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 你是否曾经为了整理B站视频内容…

2026/7/25 7:24:29阅读更多 →
百度网盘提取码智能获取终极指南:3秒破解资源密码的完整教程

百度网盘提取码智能获取终极指南:3秒破解资源密码的完整教程

百度网盘提取码智能获取终极指南:3秒破解资源密码的完整教程 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 还在为百度网盘分享链接的提取码而烦恼吗&a…

2026/7/25 7:24:29阅读更多 →
ReDiPrune:多模态大模型投影前令牌剪枝技术解析

ReDiPrune:多模态大模型投影前令牌剪枝技术解析

1. 项目背景与核心价值在当下多模态大模型(Multimodal LLMs)快速发展的背景下,模型效率问题日益凸显。ReDiPrune提出了一种创新的投影前令牌剪枝技术,直击多模态处理中的计算瓶颈。传统方法通常在投影操作后对令牌进行剪枝&#x…

2026/7/25 7:24:29阅读更多 →
VMD-CNN-BiLSTM轴承故障诊断模型解析

VMD-CNN-BiLSTM轴承故障诊断模型解析

1. 项目背景与核心价值轴承作为旋转机械的核心部件,其健康状态直接影响设备运行安全。传统振动信号分析方法依赖人工特征提取,存在效率低、泛化性差的问题。本项目采用西储大学轴承数据集(CWRU),构建VMD-CNN-BiLSTM混合…

2026/7/25 7:22:28阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/25 1:01:14阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/25 1:01:14阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/25 1:01:14阅读更多 →
突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是为了解决您的…

2026/7/25 0:01:16阅读更多 →
C++ string类模拟实现:从深拷贝到内存管理的完整指南

C++ string类模拟实现:从深拷贝到内存管理的完整指南

1. 项目概述:为什么我们要“手撕”string类?在C的学习道路上,尤其是从C语言过渡到C的“初阶”阶段,string类绝对是一个绕不开的核心。标准库里的std::string用起来太方便了,、find、substr,几个操作符和函数…

2026/7/25 0:01:16阅读更多 →
三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

1. 先搞清楚“三角洲寻宝鼠”到底是什么工具从名称来看,“三角洲寻宝鼠”更像是一个资源查找或文件检索类工具,而不是游戏或娱乐软件。这类工具的核心价值在于帮助用户快速定位特定资源,比如文档、图片、压缩包或特定格式的文件。如果你经常需…

2026/7/25 0:01:16阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/24 23:01:03阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/24 19:00:40阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/24 19:00:40阅读更多 →