影刀RPA实操指南:自动发送邮件从SMTP配置到带附件定时报告
想象一下这个场景:
你凌晨三点被闹钟叫醒,打开电脑,登录邮箱,把昨晚采集好的数据报告发出去。
发完之后才想起——这个流程影刀明明可以自动跑。
是的,邮件发送是RPA自动化里最容易被忽略的"收尾环节"。
数据采了、报表生成了、图表画好了,结果最后一步"发送"还是人在点。
这篇文章带你彻底解决这个问题。
影刀发送邮件的四种方式
| 方式 | 适用场景 | 难度 |
|---|---|---|
| 影刀内置"发送邮件"指令 | 最简单,适合个人QQ/163邮箱 | ⭐ |
| Python smtplib | 灵活,适合企业邮箱/Exchange | ⭐⭐ |
| 企业微信邮件 | 公司用企业微信生态 | ⭐ |
| 网页操作模拟 | 万不得已的备选方案 | ⭐⭐⭐ |
大多数场景,前两种就够了。
方式一:影刀内置邮件指令(最简单)
影刀提供了开箱即用的"发送邮件"指令。
QQ邮箱配置
QQ邮箱的SMTP默认是关闭的,需要先去开启。
开启步骤:
- 登录QQ邮箱 → 设置 → 账户
- 找到"POP3/IMAP/SMTP服务"
- 开启"IMAP/SMTP服务"
- 验证密保后,会得到一个授权码(不是QQ密码!)
影刀指令配置
指令:发送邮件 SMTP服务器:smtp.qq.com 端口:465(SSL) 发件人邮箱:你的QQ号@qq.com 授权码:刚才获取的16位授权码 收件人:target@example.com 邮件主题:每日销售数据报告 - 2024-01-15 邮件正文:<你的正文内容> 附件:D:/reports/sales_report.xlsx163邮箱同理
SMTP服务器:smtp.163.com 端口:465(SSL) 授权码:在163邮箱设置里开启SMTP后获取 [video(video-AO9YhWbY-1781341387932)(type-csdn)(url-https://live.csdn.net/v/embed/525000)(image-https://v-blog.csdnimg.cn/asset/23da3fe1f67a47106d725406cfde9a97/cover/Cover0.jpg)(title-拼多多店群自动化上架方案)]多收件人
多个收件人用逗号分隔:
收件人:user1@qq.com,user2@163.com,user3@company.com也可以加上"抄送"和"密送"字段。
方式二:Python发送邮件(灵活版)
内置指令好用的前提是:你的邮箱支持标准SMTP。
遇到Exchange企业邮箱、需要自定义邮件头、发送HTML富文本邮件时,Python方案更灵活。
基础脚本
importsmtplibfromemail.mime.textimportMIMETextfromemail.mime.multipartimportMIMEMultipartfromemail.mime.baseimportMIMEBasefromemailimportencodersimportosdefsend_email(subject,body,to_emails,attachments=None):# QQ邮箱SMTP配置smtp_server="smtp.qq.com"smtp_port=465sender="your_email@qq.com"password="你的授权码"# 构建邮件msg=MIMEMultipart()msg['From']=sender msg['To']=', '.join(to_emails)msg['Subject']=subject# 添加正文msg.attach(MIMEText(body,'plain','utf-8'))# 添加附件ifattachments:forfile_pathinattachments:withopen(file_path,'rb')asf:part=MIMEBase('application','octet-stream')part.set_payload(f.read())encoders.encode_base64(part)filename=os.path.basename(file_path)part.add_header('Content-Disposition',f'attachment; filename="{filename}"')msg.attach(part)# 发送withsmtplib.SMTP_SSL(smtp_server,smtp_port)asserver:server.login(sender,password)server.send_message(msg)print(f'邮件已发送:{subject}')# 使用send_email(subject='每日数据报告 2024-01-15',body='请看附件中的销售数据。',to_emails=['boss@company.com','colleague@company.com'],attachments=['D:/reports/sales_report.xlsx','D:/reports/chart.png'])发送HTML邮件
有时候你想发一封排版好看的邮件:
html_body=""" <html> <body> <h2>今日数据概览</h2> <table border="1" cellpadding="8" style="border-collapse:collapse"> <tr style="background:#1890ff;color:white"> <th>指标</th><th>今日</th><th>昨日</th><th>变化</th> </tr> <tr> <td>销售额</td><td>¥25,800</td><td>¥22,100</td> <td style="color:#52c41a">+16.7%</td> </tr> </table> <p>详细数据见附件。</p> </body> </html> """msg.attach(MIMEText(html_body,'html','utf-8'))用HTML邮件替代纯文本,报告看起来专业一个档次。
163企业邮箱
很多公司用163/阿里企业邮箱,SMTP配置如下:
# 163企业邮箱smtp_server="smtp.qiye.163.com"smtp_port=465# 或 587(TLS)# 阿里企业邮箱smtp_server="smtp.mxhichina.com"smtp_port=465端口如果465连不上,换587试试。
实战:数据采集 → 报告生成 → 邮件发送全链路
把前面学的内容串起来,做一个完整的自动化。
流程结构
影刀主流程: ├─ 1. 电商数据采集(采集今日商品价格) ├─ 2. 数据写入Excel:daily_price.xlsx ├─ 3. Python脚本生成图表: │ python generate_chart.py │ → 生成 price_trend.png ├─ 4. 构建邮件正文: │ 设置变量 email_body = 拼接今日数据摘要  ├─ 5. 发送邮件: │ 收件人:boss@company.com │ 附件:daily_price.xlsx + price_trend.png │ 正文:email_body └─ 6. 发送企微通知: │ 每日报告已发送至邮箱关键点:邮件正文动态拼接
不要写死正文内容,让它随数据变化:
设置变量 email_body = "" 今天共监控 {{total_count}} 个SKU 价格波动 {{changed_count}} 个,其中上涨 {{up_count}} 下降 {{down_count}} 波动最大SKU:{{max_change_sku}},变化幅度 {{max_change_pct}}% 请查收附件中的详细数据。影刀的变量拼接用{{变量名}}语法。
常见错误与解决
错误1:535 Authentication Failed
smtplib.SMTPAuthenticationError: (535, b'Login Fail')原因:密码错了。
解决:QQ/163邮箱必须用授权码,不是邮箱登录密码。去邮箱设置里重新获取授权码。
错误2:Connection Refused
ConnectionRefusedError: [WinError 10061]原因:端口被封或选错了。
解决:
- 先用
ping smtp.qq.com测试网络 - 465不行换587
- 公司网络可能封了SMTP端口,试试用手机热点测试
错误3:附件中文名乱码
# 错误写法filename="每日报告.xlsx"# 正确写法fromemail.headerimportHeader filename=Header("每日报告.xlsx",'utf-8').encode()错误4:邮件进了垃圾箱
原因:发件频率太高、内容被判定为垃圾邮件。
解决:
- 每次发送间隔至少30秒
- 正文不要全是链接和数字
- 加一句"如不需要此报告请回复退订"(虽然是自动化,但保持礼貌)
TEMU店群如何管理运营?
什么时候用邮件,什么时候用企微
| 场景 | 推荐渠道 |
|---|---|
| 需要正式存档 | 邮件 |
| 发送附件(Excel/PDF) | 邮件 |
| 多人审批流转 | 邮件 |
| 即时告警通知 | 企业微信/钉钉 |
| 团队群内通报 | 企业微信 |
| 外部合作伙伴 | 邮件 |
| 日报/周报 | 都可以,看公司习惯 |
一句话:正式报告走邮件,即时通知走企微。
定时发送的注意事项
邮件发送和定时任务配合时,有几个坑:
1. 不要凌晨发送
凌晨3点的邮件,收件人会觉得你在加班或者流程出了bug。
设置在工作时间发送(如每天9:00或周一9:30),更自然。
2. 加"发送失败"的兜底
邮件发送可能因为网络、授权码过期等各种原因失败。
try:send_email(...)print('发送成功')exceptExceptionase:print(f'发送失败:{e}')# 写到本地日志# 发送企微告警给开发者永远不要假设邮件一定会发成功。
3. 授权码定期检查
QQ邮箱的授权码有时候会过期。在每月1号让流程给自己发一封测试邮件,如果没有收到就说明授权码该换了。
总结
自动发送邮件是RPA自动化链条的"最后一公里"。
数据采了、报表做了、图表画了,如果还需要人手动发送,前面的自动化就只完成了80%。
影刀内置的"发送邮件"指令满足大部分需求,需要灵活定制时切到Python smtplib。
记得获取正确的授权码、处理好附件中文名、加上失败兜底逻辑。
让数据自己跑到收件人的邮箱里——这才是完整的自动化。
内容标签:#影刀RPA #邮件自动化 #SMTP #Python #定时报告
作者:林焱
系列:影刀RPA实操指南系列——从单点指令到端到端自动化解决方案