影刀RPA 邮件自动化入门:SMTP收发邮件与附件处理完全指南
影刀RPA 邮件自动化入门SMTP收发邮件与附件处理完全指南每天手动发几十封邮件、从邮箱里扒附件、盯着收件箱等某封邮件——这些是自动化最该接手的活。影刀对邮件自动化的支持分两个层面一是内置的邮件相关动作简单场景够用二是Python节点的smtplib和imaplib库复杂场景绕不开。这篇文章把两种方式都讲透从发一封简单邮件到批量下载附件一步到位。什么情况用邮件自动化和手动操作相比自动化的优势在三个场景特别明显定时发送报表。每天早上9点把昨天的销售数据汇总成Excel自动发给老板。人可以做但人会忘、会请假、会有起床气。自动化的不会。批量下载附件。供应商每天发来几十封带附件的对账单一个个下载、解压、汇总。手工做半小时自动化3分钟。监控收件箱触发流程。收到客户的订单邮件 → 自动解析内容 → 写入ERP → 回复确认邮件。整条链路无人值守。批量发送个性化邮件。给100个客户发不同的报价单每人一个专用附件。手工发你一天都干不完自动化10分钟。方式一影刀内置邮件动作简单场景影刀在网络分类下提供了一套邮件动作核心就三个【发送邮件】通过SMTP发邮件支持正文、附件、抄送【读取邮件】通过IMAP读取收件箱支持筛选条件【下载附件】把邮件里的附件保存到本地发送一封邮件入门操作拖入**【发送邮件】**动作配置SMTP服务器信息发件服务器smtp.qq.comQQ邮箱/smtp.163.com163邮箱/smtp.gmail.comGmail端口QQ邮箱用465SSL163用465Gmail用587发件邮箱地址和密码注意不是邮箱登录密码是SMTP授权码填写收件人、主题、正文如果有附件在附件栏添加文件路径配置大概长这样SMTP服务器smtp.qq.com 端口465 SSL是 发件邮箱dauuhuangqq.com 授权码xxxxxxxxxxxxxx从QQ邮箱设置里获取 收件人bosscompany.com 主题【日报】2026-07-01 销售数据 正文老板好昨日销售额为 ¥35,280.00详见附件。 附件C:\reports\daily_20260701.xlsx获取SMTP授权码这是个新手必踩的坑。不同邮箱的授权码获取方式店群矩阵自动化突破运营极限QQ邮箱登录QQ邮箱 → 设置 → 账户 → POP3/IMAP/SMTP服务 → 开启 → 生成授权码。系统会弹出一个16位字符串复制下来。注意生成授权码时QQ邮箱会要求短信验证。163邮箱登录163邮箱 → 设置 → POP3/SMTP/IMAP → 开启 → 新增授权码。163的授权码可以自定义比如设置成容易记的。有效期默认长期也可以在设置里调。GmailGoogle账号 → 安全性 → 两步验证 → 应用专用密码。生成时选择邮件和你的设备然后会得到一个16位密码。关键提醒授权码只显示一次关了页面就看不到了。务必当场复制保存。截图也行但那串字符截图丢了更麻烦。读取邮件**【读取邮件】**动作的配置IMAP服务器imap.qq.comQQ/ imap.163.com163/ imap.gmail.comGmail 端口993 SSL是 邮箱地址你的邮箱 授权码同上 筛选条件未读 / 指定发件人 / 指定主题关键词 / 指定日期范围 返回结果邮件列表发件人、主题、时间、正文、附件列表返回的邮件列表是一个结构化数据每条邮件包含字段字段说明发件人发件邮箱地址主题邮件标题时间发送时间正文邮件文本内容附件列表附件文件名和下载链接邮件ID唯一标识符实际操作时要注意IMAP读取邮件默认只返回前20封。如果你的收件箱里囤了几千封未读需要配置读取数量或分页。下载附件**【下载附件】**动作需要嵌套在读取邮件之后流程 1. 【读取邮件】→ 得到邮件列表 mail_list 2. 【ForEach】遍历 mail_list 中的每封邮件 3. 【IF】该邮件的附件列表不为空 4. 【下载附件】 邮件ID 当前邮件的邮件ID 保存路径 C:\attachments\ 文件名 5. 【END IF】 6. 【END ForEach】内置动作的局限性影刀内置邮件动作确实方便但有几个硬伤不支持HTML格式邮件。只能发纯文本不能发带排版、图片、表格的富文本邮件。附件大小限制。大附件超过10MB容易超时没有断点续传。邮件筛选能力弱。只能按未读、发件人、主题关键词筛选不能按邮件正文内容或附件类型筛选。不能标记已读/移动邮件。读取完后邮件状态不变下次还会读到同一批。这些限制在简单场景下不影响使用。一旦你的需求稍微复杂一点就得切换到Python节点了。方式二Python节点发邮件进阶玩家Python的smtplib和email库是标准库影刀Python节点默认就支持不需要额外安装。它能做到影刀内置动作做不到的一切。发HTML邮件用Python节点发一封带表格的邮件importsmtplibfromemail.mime.textimportMIMETextfromemail.mime.multipartimportMIMEMultipartfromemail.mime.baseimportMIMEBasefromemailimportencoders# 构建邮件msgMIMEMultipart()msg[From]dauuhuangqq.commsg[To]bosscompany.commsg[Subject]【日报】2026-07-01 销售数据# HTML正文html_body h2昨日销售汇总/h2 p销售额b stylecolor:red¥35,280.00/b/p table border1 cellpadding5 tr stylebackground:#eee th商品/thth销量/thth金额/th /tr trtd商品A/tdtd120/tdtd¥12,000/td/tr trtd商品B/tdtd85/tdtd¥23,280/td/tr /table brp详情见附件。/p ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6b8235cbfda44506800dec9027a5a1c0.png#pic_center) msg.attach(MIMEText(html_body,html,utf-8))# 添加附件filepathrC:\reports\daily_20260701.xlsxwithopen(filepath,rb)asf:attachmentMIMEBase(application,octet-stream)attachment.set_payload(f.read())encoders.encode_base64(attachment)attachment.add_header(Content-Disposition,fattachment; filenamedaily_20260701.xlsx)msg.attach(attachment)# 发送serversmtplib.SMTP_SSL(smtp.qq.com,465)server.login(dauuhuangqq.com,你的授权码)server.send_message(msg)server.quit()print(邮件发送成功)这段代码的核心价值在于html_body——你可以嵌任何HTML表格、图片链接、彩色文字、加粗强调全都可以。发给老板的报表看起来专业得多。批量个性化发送给不同客户发不同内容、不同附件。把客户列表放在一个Excel里客户名邮箱报价单路径备注A公司aa.comA报价.xlsx已签约老客户B公司bb.comB报价.xlsx新客户importsmtplibfromemail.mime.textimportMIMETextfromemail.mime.multipartimportMIMEMultipartfromemail.mime.baseimportMIMEBasefromemailimportencodersimportopenpyxl# 读取客户列表假设Excel已通过影刀读取到变量中# customers 影刀传入的客户数据列表serversmtplib.SMTP_SSL(smtp.qq.com,465)server.login(dauuhuangqq.com,你的授权码)forcustomerincustomers:namecustomer[客户名]email_addrcustomer[邮箱]filepathcustomer[报价单路径]remarkcustomer[备注]msgMIMEMultipart()msg[From]dauuhuangqq.commsg[To]email_addr msg[Subject]f{name}— 本月报价单body_textf p{name}的负责人您好/p p附件是本月的报价明细请查收。/p p如有疑问请回复本邮件。/p # 老客户额外加一句if老客户inremark:body_textp stylecolor:blue感谢您一直以来的信任与支持/pmsg.attach(MIMEText(body_text,html,utf-8))# 添加附件withopen(filepath,rb)asf:attachmentMIMEBase(application,octet-stream)attachment.set_payload(f.read())encoders.encode_base64(attachment)attachment.add_header(Content-Disposition,fattachment; filename{filepath.split(chr(92))[-1]})msg.attach(attachment)server.send_message(msg)print(f已发送给{name}({email_addr}))server.quit()print(全部发送完成)关键点SMTP连接只建立一次循环里复用同一个连接。如果每次都smtplib.SMTP_SSL()然后quit()100个客户就要建立100次连接大部分时间浪费在TCP握手上了。方式三Python节点读邮件IMAP影刀内置的**【读取邮件】**在内容解析上能力有限特别是处理复杂邮件格式时。Python的imaplib可以直接操作原始邮件数据。读取未读邮件并解析importimaplibimportemailfromemail.headerimportdecode_header# 连接IMAP服务器mailimaplib.IMAP4_SSL(imap.qq.com,993)mail.login(dauuhuangqq.com,你的授权码)mail.select(INBOX)# 搜索未读邮件status,message_idsmail.search(None,UNSEEN)id_listmessage_ids[0].split()results[]formsg_idinid_list[-10:]:# 只读最近10封status,msg_datamail.fetch(msg_id,(RFC822))raw_emailmsg_data[0][1]msgemail.message_from_bytes(raw_email)# 解码主题subject,encodingdecode_header(msg[Subject])[0]ifisinstance(subject,bytes):subjectsubject.decode(encodingorutf-8,errorsignore)# 解码发件人from_strmsg[From]# 提取正文bodyifmsg.is_multipart():forpartinmsg.walk():content_typepart.get_content_type()ifcontent_typetext/plainorcontent_typetext/html:payloadpart.get_payload(decodeTrue)ifpayload:bodypayload.decode(utf-8,errorsignore)else:payloadmsg.get_payload(decodeTrue)ifpayload:bodypayload.decode(utf-8,errorsignore)results.append({id:msg_id.decode(),subject:subject,from:from_str,body:body[:200]# 只取前200字符做摘要})mail.logout()# 将 results 传回影刀变量按发件人主题日期组合筛选IMAP的搜索语法非常强大比影刀内置动作灵活得多# 搜索发件人包含供应商且主题包含对账单mail.search(None,FROM,供应商,SUBJECT,对账单)# 搜索最近7天的邮件mail.search(None,SINCE,24-Jun-2026)# 搜索带附件的邮件mail.search(None,HAS,attachment)# 组合搜索最近7天 发件人是供应商 有附件mail.search(None,(SINCE 24-Jun-2026 FROM 供应商 HAS attachment))下载附件并自动重命名importimaplibimportemailimportos mailimaplib.IMAP4_SSL(imap.qq.com,993)mail.login(dauuhuangqq.com,你的授权码)mail.select(INBOX)save_dirrC:\downloads\attachmentsos.makedirs(save_dir,exist_okTrue)# 读取最近50封邮件的附件status,idsmail.search(None,ALL)formsg_idinids[0].split()[-50:]:status,msg_datamail.fetch(msg_id,(RFC822))msgemail.message_from_bytes(msg_data[0][1])# 获取发件人和日期用于重命名from_namemsg[From].split()[0].replace(,).replace(,).strip()date_strmsg[Date][:10].replace( ,-)forpartinmsg.walk():ifpart.get_content_disposition()attachment:filenamepart.get_filename()iffilename:# 解码文件名decoded_nameemail.header.decode_header(filename)[0][0]ifisinstance(decoded_name,bytes):filenamedecoded_name.decode(utf-8,errorsignore)else:filenamedecoded_name# 加前缀防重名save_namef{date_str}_{from_name}_{filename}save_pathos.path.join(save_dir,save_name)withopen(save_path,wb)asf:f.write(part.get_payload(decodeTrue))print(f已下载{save_name})mail.logout()重命名的逻辑很有用——如果所有附件都叫报价单.xlsx下载到同一个文件夹里后下载的会覆盖前面的。加上日期和发件人前缀后就不会了。容易踩的四个坑坑1授权码和登录密码搞混temu店群自动化报活动案例这是新手翻车第一现场。SMTP/IMAP登录用的不是邮箱登录密码是授权码。很多人在QQ邮箱设置里折腾半天把邮箱密码填进去结果一直报认证失败。原因就是这个。另外QQ邮箱和163邮箱的SMTP/IMAP服务默认是关闭的需要先去设置里手动开启。如果开都还没开连授权码都获取不到。坑2Gmail需要开启低安全性应用或使用应用专用密码Gmail的安全策略比较严格。如果你用的是普通Gmail账号需要在Google账户设置里开启两步验证然后生成应用专用密码给SMTP/IMAP使用。如果用的是企业GmailGoogle Workspace可能还需要管理员在后台开启SMTP/IMAP访问权限。坑3大附件发送超时SMTP发邮件默认没有超时控制但大附件20MB以上可能导致连接被邮件服务器掐断。解决方案如果附件超过10MB压缩一下再发或者上传到云盘在邮件正文里放下载链接。别硬传硬传必翻。importzipfile# 压缩大文件defcompress_file(src_path,zip_path):withzipfile.ZipFile(zip_path,w,zipfile.ZIP_DEFLATED)aszf:zf.write(src_path,os.path.basename(src_path))坑4读取邮件后不标记已读如果不标记已读下次读又是同一批邮件处理过的数据会重复。# 处理完后标记已读mail.store(msg_id,FLAGS,\\Seen)或者更安全的做法——读完后移动到已处理文件夹原收件箱保持干净# 先创建归档文件夹如果不存在mail.create(已处理)# 移动邮件mail.copy(msg_id,已处理)mail.store(msg_id,FLAGS,\\Deleted)mail.expunge()选型指南场景推荐方式理由发纯文本日报影刀内置动作配置即用不用写代码发带表格/图片的报表Python节点内置不支持HTML格式批量发个性化邮件Python节点循环模板组合灵活下载20MB以下附件两者都可看个人熟悉程度按复杂条件筛选邮件Python节点(IMAP)内置筛选太弱处理邮件→触发后续流程Python节点需要解析正文/提取关键信息新手建议先从内置动作入手碰到内置动作搞不定的场景再切Python。不用一步到位追求最优雅的方案能跑通再优化。核心就三条授权码不是登录密码HTML邮件得靠Python读完邮件要标记已读。这三条记住了邮件自动化就不会有大坑。作者林焱

相关新闻

MAMA注意力机制:高效处理长序列的动态内存优化方案

MAMA注意力机制:高效处理长序列的动态内存优化方案

1. 注意力机制演进与MAMA的诞生背景在深度学习领域,注意力机制已经成为处理序列数据的标配组件。从最初的简单加权到后来的自注意力(Self-Attention),再到各种变体如稀疏注意力、局部注意力等,这个方向的发展从未停止。…

2026/10/14 11:03:42 阅读更多 →
金融产品动态定价系统架构与实现

金融产品动态定价系统架构与实现

1. 金融产品定价策略优化系统概述 在金融行业摸爬滚打十几年,我深刻体会到定价策略是金融机构的核心竞争力。传统定价模式往往依赖经验公式和静态规则,面对瞬息万变的市场环境越来越力不从心。这套金融产品定价策略优化系统,正是为了解决这个…

2026/10/6 19:20:08 阅读更多 →
影刀RPA 退换货处理自动化:RMA申请与退款跟踪

影刀RPA 退换货处理自动化:RMA申请与退款跟踪

影刀RPA 退换货处理自动化:RMA申请与退款跟踪 作者:林焱 | 分类:影刀RPA新手教程 | 难度:★★ 什么情况用 电商售后客服每天处理大量退换货请求。买家发起退货 → 客服审核 → 同意后生成退货单 → 买家寄回 → 仓库收货确认 → 发…

2026/9/25 17:32:50 阅读更多 →

最新新闻

第2章:Linux 基础,pwd 命令

第2章:Linux 基础,pwd 命令

专栏导航 上一篇:第2章:Linux 基础,date 命令 回到目录 下一篇:第2章:Linux 基础,whoami 命令 本节前言 对于本节所讲解的知识,有可能,你会需要时不时地参考本专栏的其它文章。真…

2026/10/14 11:05:15 阅读更多 →
UE4 C++静态加载SkeletalMesh与动画蓝图完整实操

UE4 C++静态加载SkeletalMesh与动画蓝图完整实操

我们接着往下写。这是“基于C代码的UE4学习”系列第三十八篇,这次主题很聚焦:用C代码把 SkeletalMesh 加载到角色身上,并且静态加载一个动画蓝图。很多人在这个阶段会开始纠结——明明蓝图里拖个引用、拉个变量就行,为什么偏要用代…

2026/10/14 11:05:15 阅读更多 →
Kotlin泛型深度解析:类型擦除、型变与reified实战

Kotlin泛型深度解析:类型擦除、型变与reified实战

1. 从类型擦除说起:为什么Kotlin泛型值得单独开一个专题很多人学Kotlin泛型的时候,第一反应是"这不就是Java那套吗"。我一开始也这么想,直到在一个数据解析模块里踩了个坑——写了一个看似完美的泛型转换函数,编译通过&…

2026/10/14 11:05:15 阅读更多 →
重积分建模本质:从物理直觉到高维应用

重积分建模本质:从物理直觉到高维应用

1. 为什么重积分的应用远不止“算体积”——从物理建模到几何直觉的跃迁很多人学完二重积分,脑子里只留下一个公式:∬_D f(x,y) dσ。考试时套用极坐标换元、画个积分区域、算个数值,就以为掌握了。但我在带某高校数学分析实验课时发现&#…

2026/10/14 11:05:15 阅读更多 →
libxl 4.1.1带注册信息:C++离线生成Excel报表实践

libxl 4.1.1带注册信息:C++离线生成Excel报表实践

简介:libxl4.1.1 带注册信息资源包,聚焦高效轻量级 Excel 读写库的跨平台集成,面向需要将 Excel 处理能力嵌入应用的 C/C、C# 开发者,重点梳理 API 调用、依赖库、编译选项以及注册授权验证在 Windows 与 Linux 环境下的差异&…

2026/10/14 11:05:15 阅读更多 →
航空订票系统UML建模:用例图、时序图与类图实战指南

航空订票系统UML建模:用例图、时序图与类图实战指南

简介:航空订票系统是典型的信息管理系统设计案例,适合软件工程、系统分析与设计课程的学生,以及正在学习UML建模的开发者参考。资源以UML可视化建模为主线,覆盖用例图、类图、包图、顺序图、协作图、状态图、活动图、组件图与部署…

2026/10/14 11:04:13 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →