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")
关键说明
- 用列表替代嵌套元组:列表的
append方法会在末尾追加元素,保持结构扁平,遍历的时候每个元素都是包含4个值的元组,能正常解包。 - 路径转义处理:用原始字符串
r"路径"或者双反斜杠\\,避免Windows路径中的反斜杠被当成转义字符。 - 索引注意事项:如果
filNameArr中每个附件对应的索引不同,需要调整循环里的filNameArr[z][2],比如改成filNameArr[z + u + 1][2],避免生成重复的附件路径。
内容的提问来源于stack exchange,提问作者helpVulcan
相关产品推荐
相关产品推荐

