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

Python实现邮件附件数量动态可扩展的技术问题求助

解决动态添加多PDF附件到配送邮件的问题

你的核心问题是构建附件列表时用了嵌套元组,导致遍历解包失败。原来的att3 = (att3, att2)会生成嵌套结构(比如((附件1), (附件2))),而遍历需要的是扁平的元组/列表(比如[(附件1), (附件2), (附件3)])。

修复后的代码实现

用列表来动态收集附件,确保结构扁平:

if filSize > 1:
    # 初始化附件列表,先加入第一个附件
    attachments = []
    # 生成第一个附件的元组(替换成你原本att3的初始化逻辑)
    first_attach = (
        r"C:\Users\hancke\Desktop\TEst mail\" + filNameArr[z][2] + ".pdf",
        "application",
        "pdf",
        filNameArr[z][2] + ".pdf"
    )
    attachments.append(first_attach)
    
    # 循环添加剩余的附件
    for u in range(filSize - 1):
        # 注意:如果filNameArr的索引需要递增,要调整此处取值,避免生成重复附件
        att2 = (
            r"C:\Users\hancke\Desktop\TEst mail\" + filNameArr[z][2] + ".pdf",
            "application",
            "pdf",
            filNameArr[z][2] + ".pdf"
        )
        attachments.append(att2)
    
    print("What to expect for attachments:")
    print(attachments)
    
    # 遍历扁平列表添加附件
    for attachment, main, sub, filename in attachments:
        with open(attachment, "rb") as fp:
            msg.add_attachment(fp.read(), maintype=main, subtype=sub, filename=filename)
    z += 1
else:
    with open(attach1, "rb") as fp:
        msg.add_attachment(fp.read(), maintype="application", subtype="pdf", filename="filename.pdf")

关键说明

  1. 用列表替代嵌套元组:列表的append方法会在末尾追加元素,保持结构扁平,遍历的时候每个元素都是包含4个值的元组,能正常解包。
  2. 路径转义处理:用原始字符串r"路径"或者双反斜杠\\,避免Windows路径中的反斜杠被当成转义字符。
  3. 索引注意事项:如果filNameArr中每个附件对应的索引不同,需要调整循环里的filNameArr[z][2],比如改成filNameArr[z + u + 1][2],避免生成重复的附件路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 08:25:56