Python实现Outlook多附件文件名存入列表问题排查
问题分析
你的脚本处理多附件邮件时失效,核心问题是循环范围错误:
- Outlook的
Attachments.Item索引从1开始计数 - 你使用
range(1, m_attach),而range是左闭右开区间,当邮件有N个附件时,这个循环只会遍历前N-1个附件,最后一个附件会被遗漏
另外,计算附件数量的方式可以简化,直接用mail.Attachments.Count即可,无需通过列表推导式转换。
修正后的代码
outlook = win32com.client.Dispatch("Outlook.Application") mapi = outlook.GetNamespace("MAPI") inbox = mapi.Folders['user@outlook.com'].Folders['Inbox'].Folders['Folder1'] message = inbox.Items contents = [] attachment_name = [] for mail in message: if mail.UnRead == True and mail.Attachments.Count > 0: attachments = mail.Attachments # 直接用Attachments.Count获取附件总数 m_attach = attachments.Count contents.append(mail.body) contents.append(mail.Subject) # 循环范围改为range(1, m_attach + 1),包含最后一个附件的索引 for i in range(1, m_attach + 1): attachment = attachments.Item(i) attachment_name.append(attachment.FileName) print(attachment_name)
额外优化建议
- 可以直接遍历
Attachments集合,不用手动索引,代码更简洁:# 替换原有的for循环部分 for attachment in attachments: attachment_name.append(attachment.FileName) - 建议对
message应用Restrict方法过滤未读邮件,比遍历所有邮件更高效:# 只获取未读邮件 unread_messages = message.Restrict("[UnRead] = True") for mail in unread_messages: if mail.Attachments.Count > 0: # 后续处理逻辑...
内容的提问来源于stack exchange,提问作者selereth
相关产品推荐
相关产品推荐

