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

使用imaplib移动邮件至自定义文件夹报错:COPY command error: BAD

解决imaplib移动邮件到自定义文件夹的"COPY command error: BAD"问题

出现这个错误通常和自定义文件夹的IMAP标识格式、命令参数规范有关,以下是具体排查和解决方法:

1. 确认自定义文件夹的正确IMAP路径

不同IMAP服务器对文件夹名称的处理规则不同,尤其是带空格的名称,直接用Test Folder可能不符合服务器要求。你可以先列出所有文件夹,查看目标文件夹的真实标识:

# 连接并登录后执行
resp, folders = conn.list()
for folder in folders:
    print(folder)

输出结果会类似b'(\\HasNoChildren) "." "Test Folder"',这里的"Test Folder"就是服务器认可的文件夹标识,需要用这个带双引号的字符串作为目标参数。

2. 修正COPY命令的参数格式

IMAP协议要求带空格的文件夹名称必须用双引号包裹,直接传入Test Folder会被服务器解析为多个参数,导致命令错误。你可以:

  • 直接用带双引号的字符串作为目标文件夹:
    conn.copy(msg_id, '"Test Folder"')
    
  • 或者使用imaplib的quote()方法自动处理名称:
    target_folder = conn.quote('Test Folder')
    conn.copy(msg_id, target_folder)
    

3. 排查文件夹权限问题

虽然能正常移动到Archive,但自定义文件夹可能存在权限限制。检查邮箱设置,确保当前账号对Test Folder拥有写入权限。

完整示例代码

import imaplib

# 连接IMAP服务器
conn = imaplib.IMAP4_SSL('imap.yourmailserver.com')
conn.login('your_email@domain.com', 'your_password')

# 选择收件箱
conn.select('INBOX')

# 列出所有文件夹,确认目标路径
resp, folders = conn.list()
for folder in folders:
    print(folder)

# 定义目标文件夹(根据list结果调整)
target_folder = '"Test Folder"'

# 搜索要移动的邮件(这里以第一封邮件为例)
resp, msg_ids = conn.search(None, 'ALL')
if msg_ids[0]:
    msg_id = msg_ids[0].split()[0]
    # 复制邮件到目标文件夹
    conn.copy(msg_id, target_folder)
    # 标记原邮件为删除并彻底移除
    conn.store(msg_id, '+FLAGS', '\\Deleted')
    conn.expunge()

# 关闭连接
conn.close()
conn.logout()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 15:35:12