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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 11:15:59