You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为右键选中的多个文件执行单次操作 实现批量附件添加到单封邮件

解决Windows右键自定义菜单多文件选中重复启动问题

问题原因

你遇到的重复启动是Windows右键菜单的默认行为:未做特殊配置的自定义菜单项,选中多个文件时会为每个文件单独启动一次绑定程序,导致你的邮件脚本每次只能拿到1个文件路径,生成多封邮件。

解决方案一:修改注册表适配多文件选中(首选)

该方案可以让系统一次性把所有选中的文件路径传给你的脚本,仅启动一次程序:

  • 按下Win+R输入regedit回车打开注册表编辑器,定位到你之前新增的自定义菜单项路径,通常为HKEY_CLASSES_ROOT\*\shell\你设置的菜单名称
  • 在该路径下新建字符串值,名称为MultiSelectModel,数值数据填写Player,该配置会告知Windows选中多个文件时仅启动一次程序
  • 打开该路径下的command子项,修改默认值的调用命令,格式参考:pythonw.exe "C:\你的脚本完整路径\send_email.py" "%*",其中%*代表接收所有选中文件的路径参数

解决方案二:临时缓存兼容方案

如果注册表修改后不生效,可以用脚本侧的缓存逻辑兼容多实例问题:

  • 脚本启动后先检测指定路径的临时缓存文件是否存在,同时判断是否有已运行的同脚本进程
  • 若存在已运行进程,就将当前拿到的单个文件路径写入缓存文件后直接退出
  • 首个启动的脚本进程等待1-2秒,读取缓存内的所有文件路径,统一添加为附件发送,发送完成后删除临时缓存文件即可

适配多参数的Python脚本示例

import sys
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders

# 跳过索引0的脚本自身路径,取所有传入的文件路径
file_list = sys.argv[1:]

# 配置邮件参数
sender = "你的发件邮箱"
auth_code = "你的邮箱授权码"
receiver = "你的收件邮箱"
smtp_server = "smtp.你的邮箱服务商.com"
smtp_port = 465

# 构建邮件
msg = MIMEMultipart()
msg["From"] = sender
msg["To"] = receiver
msg["Subject"] = "右键发送文件合集"

# 批量添加附件
for file_path in file_list:
    with open(file_path, "rb") as f:
        part = MIMEBase("application", "octet-stream")
        part.set_payload(f.read())
    encoders.encode_base64(part)
    filename = file_path.split("\\")[-1]
    part.add_header("Content-Disposition", f"attachment; filename={filename}")
    msg.attach(part)

# 发送邮件
with smtplib.SMTP_SSL(smtp_server, smtp_port) as server:
    server.login(sender, auth_code)
    server.sendmail(sender, receiver, msg.as_string())

内容的提问来源于stack exchange,提问作者XZeeno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 22:15:04