之前聊过企业微信通知(第24篇)和飞书通知(第21篇),都是基于Webhook的群机器人方案。今天来补上第三种——邮件通知。
邮件通知有个独特的价值:不需要团队成员在群里,不需要对方注册任何平台,只要有邮箱就能收到。 对于对外发送报表、跨公司协作,或者给老板发数据摘要,邮件是最通用的方案,没有之一。

今天从SMTP配置开始,到带附件的日报邮件,再到一套完整的“三级通知体系”(邮件+企微+飞书)的设计思路,一次讲透。

先说核心:影刀发送邮件的两种方式
| 方式 | 原理 | 适用场景 |
|---|

| 方式 | 原理 | 适用场景 |
|---|---|---|
| SMTP指令 | 影刀内置“发送邮件”指令,通过SMTP协议发送 | 最常用,配置一次永久使用 |
| 邮件API | 调用平台API(如阿里企业邮箱、腾讯企业邮) | 企业邮箱高级功能 |
本文以SMTP方式为主——最通用,配置最简便。
第一部分:SMTP配置(一次性设置)
1. 什么是SMTP?

SMTP是“简单邮件传输协议”,是发送邮件的标准方式。你需要一个邮箱账号作为“发件人”,通过它的SMTP服务器来发送邮件。说白了,就是让影刀能像你本人一样用这个邮箱发信。
2. 常用邮箱的SMTP配置

| 邮箱类型 | SMTP服务器 | 端口 | 加密方式 | 备注 |
|---|---|---|---|---|
| QQ邮箱 | smtp.qq.com | 465 | SSL | 需开启授权码 |
| 163邮箱 | smtp.163.com | 465 | SSL | 需开启授权码 |
| 阿里企业邮 | smtp.qiye.aliyun.com | 465 | SSL | 用企业邮箱账号 |
| 腾讯企业邮 | smtp.exmail.qq.com | 465 | SSL | 用企业邮箱账号 |
| Gmail | smtp.gmail.com | 465 | SSL | 需开启“安全性较低的应用” |
| Outlook | smtp-mail.outlook.com | 587 | TLS | 微软账号 |

3. 开启SMTP服务(以QQ邮箱为例)

- 登录QQ邮箱 → 设置 → 账户
- 找到“POP3/IMAP/SMTP/Exchange服务”
- 点击“开启”SMTP服务
- 获取授权码(16位字符,保存好)
- 在影刀中配置SMTP时,密码填授权码,不是邮箱密码
4. 在影刀中配置SMTP
影刀实操路径: 指令面板搜索“发送邮件” → 拖入指令 → 填写配置
# ===== 发送邮件指令配置 =====
发送邮件(
SMTP服务器="smtp.qq.com",
SMTP端口=465,
SSL加密=True,
发件人邮箱="your_email@qq.com",
发件人密码="授权码(16位)", # 不是邮箱登录密码!
收件人="receiver@company.com",
抄送="cc@company.com", # 可选
密送="bcc@company.com", # 可选
邮件主题="【RPA】数据采集报告",
邮件正文="正文内容",
附件路径="C:/data/report.xlsx", # 可选
)

注意: 密码字段填的是授权码,不是邮箱密码。QQ/163邮箱都要求用授权码登录SMTP,别搞混了。
第二部分:邮件内容的生成
1. 纯文本邮件(最简单)
# ===== 纯文本邮件 =====
主题 = "【RPA】" + 当前日期 + " 数据采集完成"
正文 = """
您好,
今日数据采集已完成。
采集时间:{采集时间}
总数据量:{数据量} 条
成功数:{成功数}
失败数:{失败数}
详情请查看附件。
此致
RPA自动化系统

""".format(
采集时间=获取当前时间(),
数据量=总数据量,
成功数=成功数,
失败数=失败数
)
发送邮件(
SMTP服务器="smtp.qq.com",
SMTP端口=465,
SSL加密=True,
发件人邮箱="sender@qq.com",
发件人密码="授权码",
收件人="receiver@company.com",
邮件主题=主题,
邮件正文=正文
)
2. HTML邮件(带格式和表格)
# ===== HTML格式邮件(支持表格、颜色、加粗)=====
HTML正文 = """
数据日报
日期:{日期}
总数据量:{数据量} 条
执行状态:{状态文本}
各平台明细
平台 采集量 状态
{表格行}
此邮件由RPA系统自动发送,请勿回复。
"""
# ===== 在影刀中组装HTML =====
设置变量(表格行 = "")
按列表循环(平台统计, 循环项=行):
平台名 = 行[0]
采集量 = 行[1]
状态 = 行[2]
颜色 = "green" if 状态 == "成功" else "red"
表格行 = 表格行 + "" + 平台名 + " " + 采集量 + " " + 状态 + " "
结束循环
完整HTML = 替换文本(HTML模板, "{表格行}", 表格行)
完整HTML = 替换文本(完整HTML, "{日期}", 当前日期)
完整HTML = 替换文本(完整HTML, "{数据量}", 总数据量)
完整HTML = 替换文本(完整HTML, "{状态类}", "success" if 成功数 == 总数据量 else "error")
完整HTML = 替换文本(完整HTML, "{状态文本}", "全部成功" if 成功数 == 总数据量 else "部分失败")
HTML邮件看着专业,但组装起来也不复杂——核心就是动态替换占位符。影刀的字符串替换指令和循环指令配合,足够应付大部分场景。
第三部分:带附件的邮件
适用场景: 发送Excel报表、PDF报告、日志文件等。日常中最常用的就是这种。
# ===== 带附件的邮件 =====
# 1. 先确保附件存在(生成报表后发送)
如果 文件是否存在("C:/data/daily_report.xlsx") == False:
输出日志("报表文件不存在,先生成报表")
调用子流程(生成日报表)
结束If
# 2. 发送带附件的邮件
发送邮件(
SMTP服务器="smtp.qq.com",
SMTP端口=465,
SSL加密=True,
发件人邮箱="sender@qq.com",
发件人密码="授权码",
收件人="receiver@company.com",
邮件主题="【RPA】" + 当前日期 + " 数据报表",
邮件正文="您好,请查收今日数据报表。",
附件路径="C:/data/daily_report.xlsx" # 支持多个附件(用列表)
)
输出日志("邮件发送完成,附件已投递")
多附件发送
# ===== 多个附件 =====
附件列表 = [
"C:/data/daily_report.xlsx",
"C:/data/error_log.txt",
"C:/logs/screenshot.png"
]
发送邮件(
# ... 其他配置 ...
附件路径=附件列表 # 传入列表即可
)
附件大小限制
| 邮箱类型 | 附件大小限制 |
|---|---|
| QQ邮箱 | 50MB |
| 163邮箱 | 50MB |
| 阿里企业邮 | 50MB |
| Gmail | 25MB |
如果附件超过限制,考虑压缩文件或分割发送。另外,大型附件发送时记得先检查网络稳定性。
第四部分:邮件发送失败的常见原因
| 错误现象 | 可能原因 | 解决方法 |
|---|---|---|
| 连接超时 | 网络问题或端口错误 | 检查SMTP服务器和端口 |
| 认证失败 | 用户名或密码错误 | QQ/163填授权码,不是登录密码 |
| SSL错误 | 加密方式不匹配 | SSL用465端口,TLS用587端口 |
| 发件人被拒 | 邮箱被封或限制 | 检查邮箱状态 |
| 附件不存在 | 路径错误 | 检查文件路径是否存在 |
| 邮件被退回 | 收件人地址错误 | 检查收件人邮箱格式 |
很多新手卡在了“认证失败”这一步——记住,QQ/163用的是授权码,不是你的QQ密码。授权码在邮箱设置里生成,16位字符串。
第五部分:三级通知体系设计
在一个成熟的自动化项目里,光靠一种通知方式是不够的。建议同时配置三种通道,按紧急程度分级使用。
| 通知级别 | 通道 | 适用场景 | 紧急程度 |
|---|---|---|---|
| L1-邮件 | SMTP邮件 | 日报/周报、数据报表、不紧急的汇总信息 | 低 |
| L2-企微/飞书 | 群机器人 | 异常告警、流程状态、需要团队关注 | 中 |
| L3-信息/电话 | 第三方API | 严重故障、系统宕机、需要立即处理 | 高 |
三级通知的触发条件
# ===== 三级通知决策 =====
如果 错误级别 == "严重": # 关键流程失败、数据全部丢失
调用子流程(发送信息告警) # L3
调用子流程(发送企微告警) # L2(@所有人)
调用子流程(发送邮件告警) # L1
否则如果 错误级别 == "警告": # 部分数据失败、重试成功
调用子流程(发送企微告警) # L2(@负责人)
调用子流程(发送邮件告警) # L1
否则: # 正常流程完成
调用子流程(发送邮件通知) # L1
结束If
这个设计思路的核心是:邮件作为“保底”通道,覆盖所有人;群机器人作为“团队协同”通道;信息/电话作为“紧急中断”通道。三层下来,基本不会漏消息。
第六部分:完整邮件子流程模板
# ============================================
# 子流程:Send_Email_Notification
# 职责:发送邮件通知(带重试)
# 输入参数:
# - to_emails: 列表,收件人
# - subject: 文本,邮件主题
# - body: 文本,邮件正文(支持HTML)
# - attachments: 列表,附件路径(可选)
# - cc_emails: 列表,抄送(可选)
# - is_html: 布尔,是否HTML格式
# 输出参数:是否发送成功
# ============================================
# ----- 1. SMTP配置(建议从全局配置读取)-----
SMTP服务器 = G_SMTP_SERVER
SMTP端口 = G_SMTP_PORT
SSL加密 = True
发件人邮箱 = G_SENDER_EMAIL
发件人密码 = G_SENDER_PASSWORD # 建议用加密变量
# ----- 2. 发送邮件(带重试)-----
设置变量(发送成功 = False)
设置变量(最大重试次数 = 3)
按次数循环(最大重试次数):
尝试次数 = 循环索引 + 1
Try:
发送邮件(
SMTP服务器=SMTP服务器,
SMTP端口=SMTP端口,
SSL加密=SSL加密,
发件人邮箱=发件人邮箱,
发件人密码=发件人密码,
收件人=to_emails,
抄送=cc_emails,
邮件主题=subject,
邮件正文=body,
附件路径=attachments,
HTML格式=is_html
)
发送成功 = True
输出日志("邮件发送成功,收件人:" + 转为文本(to_emails))
跳出循环
Catch:
输出日志("邮件发送失败(第" + 尝试次数 + "次),等待5秒重试")
等待(5)
EndTry
结束循环
如果 发送成功 == False:
输出日志("【错误】邮件发送失败,重试" + 最大重试次数 + "次均失败")
返回结果(发送成功=False)
结束If
返回结果(发送成功=True)
# ============================================
这个子流程模板已经带重试机制,直接复制到影刀里就能用。全局配置变量推荐放在一个“全局参数”子流程里,方便统一管理。
常见问题速查
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 邮件发不出去 | SMTP配置错误 | 检查服务器、端口、授权码 |
| 收件人收不到邮件 | 进了垃圾箱 | 将发件人加入白名单 |
| 附件打不开 | 文件损坏或路径错误 | 检查文件是否完整 |
| 邮件被拦截 | 内容包含敏感词 | 修改邮件内容 |
| 邮件发送太慢 | 附件太大 | 压缩附件或分多次发送 |
| 频率超限 | 短时间内发送太多 | 控制发送频率(建议>10分钟间隔) |
推荐资源
- QQ邮箱/163邮箱SMTP设置教程(各自官网)
- Python
smtplib文档(如需更复杂的邮件操作) - 本系列第24篇《企业微信机器人通知封装》
- 本系列第21篇《飞书多维表格读写与消息通知》

