影刀RPA进阶教程_自动发送邮件与附件投递
影刀RPA进阶教程自动发送邮件与附件投递自动化流程跑完后把结果自动发邮件给相关人——这是最常见的流程收尾需求之一。影刀没有原生的发邮件指令但用 Python 的smtplib可以轻松实现。这篇文章覆盖 QQ 邮箱、163 邮箱、企业邮箱三种场景。一、准备工作获取邮箱授权码不要用邮箱登录密码要用授权码也叫 SMTP 独立密码。店群矩阵自动化突破运营极限邮箱获取授权码的路径QQ邮箱设置 → 账户 → POP3/SMTP服务 → 开启 → 生成授权码163邮箱设置 → POP3/SMTP/IMAP → 开启 → 设置授权码| 企业微信邮箱 | 设置 → 客户端专用密码 → 生成 |二、基础版发送纯文本邮件Python代码:importsmtplibfromemail.mime.textimportMIMETextfromemail.headerimportHeader# 邮箱配置 smtp_serversmtp.qq.com# QQ邮箱smtp_port465# SSL 端口senderxxxqq.com# 发件人password你的授权码# 不是登录密码receivers[colleagueqq.com,boss163.com]# 收件人列表# 邮件内容 subjectf每日数据报表 -{变量_今天日期}bodyf 各位好 今日数据采集已完成概况如下 - 采集平台淘宝 - 关键词数量{变量_关键词总数}- 商品总数{变量_采集总数}- 采集时间{变量_开始时间}~{变量_结束时间}-  -  结果文件见附件。 此邮件由自动化流程自动发送无需回复。 # 构建邮件 msgMIMEText(body,plain,utf-8)msg[From]Header(f数据机器人 {sender})msg[To]Header(,.join(receivers))msg[Subject]Header(subject,utf-8)# 发送 try:serversmtplib.SMTP_SSL(smtp_server,smtp_port)server.login(sender,password)server.sendmail(sender,receivers,msg.as_string())server.quit()print(邮件发送成功)exceptExceptionase:print(f邮件发送失败:{e})raisee三、进阶版带附件的邮件实际场景里发了报表邮件的下一秒就要问“附件呢”Python代码:importsmtplibfromemail.mime.multipartimportMIMEMultipartfromemail.mime.textimportMIMETextfromemail.mime.baseimportMIMEBasefromemailimportencodersfromemail.headerimportHeaderimportos# 邮箱配置 smtp_serversmtp.qq.comsmtp_port465senderxxxqq.compassword你的授权码receivers[colleagueqq.com]# 构建带附件的邮件 msgMIMEMultipart()msg[From]Header(f数据机器人 {sender})msg[To]Header(,.join(receivers))msg[Subject]Header(f每日报表 -{变量_今天日期},utf-8)# 正文body详见附件。此邮件由自动化流程自动发送。msg.attach(MIMEText(body,plain,utf-8))# 附件attachment_pathfD:\\报表\\日报_{变量_今天日期}.xlsxifos.path.exists(attachment_path):withopen(attachment_path,rb)asf:attachmentMIMEBase(application,octet-stream)attachment.set_payload(f.read())encoders.encode_base64(attachment)attachment.add_header(Content-Disposition,fattachment; filename{os.path.basename(attachment_path)})msg.attach(attachment)print(f已添加附件:{attachment_path})else:print(f附件不存在:{attachment_path})# 发送try:serversmtplib.SMTP_SSL(smtp_server,smtp_port)server.login(sender,password)server.sendmail(sender,receivers,msg.as_string())server.quit()print(邮件附件发送成功)exceptExceptionase:print(f发送失败:{e})四、HTML 格式邮件更美观的报表Python代码:importsmtplibfromemail.mime.textimportMIMETextfromemail.headerimportHeader# HTML 正文html_bodyf html body h2 每日销售数据看板/h2 p日期{变量_今天日期}/p table border1 cellpadding8 cellspacing0 styleborder-collapse:collapse tr stylebackground:#4A90D9;color:white th指标/thth数值/thth环比/th /tr tr td销售额/td td¥{变量_销售额:,.0f}/td td stylecolor:{greenif变量_销售环比0elsered}{变量_销售环比:.1f}%/td /tr tr td订单量/td td{变量_订单量}单/td td stylecolor:{greenif变量_订单环比0elsered}{变量_订单环比:.1f}%/td /tr [video(video-wS32QjWt-1781240287751)(type-csdn)(url-https://live.csdn.net/v/embed/524992)(image-https://v-blog.csdnimg.cn/asset/b59aed2f01d4fe8583467562aaf4dcfd/cover/Cover0.jpg)(title-temu店群自动化报活动案例)] tr td访客数/td td{变量_访客数}/td td-/td /tr /table p stylecolor:#999;font-size:12px此邮件由自动化流程自动发送/p /body /html msgMIMEText(html_body,html,utf-8)msg[From]Header(f数据看板 {sender})msg[To]Header(,.join(receivers))msg[Subject]Header(f 每日看板 -{变量_今天日期},utf-8)serversmtplib.SMTP_SSL(smtp_server,smtp_port)server.login(sender,password)server.sendmail(sender,receivers,msg.as_string())server.quit()print(HTML 邮件发送成功)五、封装为可复用的子流程# 子流程F_发送邮件# 输入参数收件人列表、主题、正文、附件路径可选# 输出参数发送结果(True/False)Python代码:importsmtplibfromemail.mime.multipartimportMIMEMultipartfromemail.mime.textimportMIMETextfromemail.mime.baseimportMIMEBasefromemailimportencodersfromemail.headerimportHeaderimportos senderxxxqq.compassword授权码defsend_mail(to_list,subject,body,attachment_pathNone):msgMIMEMultipart()msg[From]Header(sender)msg[To]Header(,.join(to_list))msg[Subject]Header(subject,utf-8)msg.attach(MIMEText(body,plain,utf-8))ifattachment_pathandos.path.exists(attachment_path):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{os.path.basename(attachment_path)})msg.attach(part)try:serversmtplib.SMTP_SSL(smtp.qq.com,465)server.login(sender,password)server.sendmail(sender,to_list,msg.as_string())server.quit()returnTrueexceptExceptionase:print(f发送失败:{e})returnFalse# 调用resultsend_mail(to_list变量_收件人列表,subject变量_邮件主题,body变量_邮件正文,attachment_path变量_附件路径)变量_发送结果result六、各邮箱 SMTP 配置速查邮箱SMTP 服务器端口QQ邮箱smtp.qq.com465 (SSL)163邮箱smtp.163.com465 (SSL)126邮箱smtp.126.com465 (SSL)Gmailsmtp.gmail.com587 (TLS)Outlooksmtp.office365.com587 (TLS)阿里企业邮箱smtp.mxhichina.com465 (SSL)腾讯企业邮箱smtp.exmail.qq.com465 (SSL)作者林焱本文为《影刀RPA学习手册》系列文章之一内容源于实操经验的整理与分享。