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

如何用Python从Outlook指定邮箱读取最新5封未读邮件并提取正文

解决方案:读取Outlook指定发件人最新5封未读邮件并存储正文

以下是修正并完善后的完整代码,可实现从Outlook读取指定发件人(Info@gmail.com)的最新5封未读邮件,并将正文存入变量:

import win32com.client
from datetime import datetime, timedelta

# 初始化Outlook客户端
outlook = win32com.client.Dispatch('outlook.application')
mapi = outlook.GetNamespace("MAPI")

# 获取默认收件箱
inbox = mapi.GetDefaultFolder(6)
messages = inbox.Items

# 设置筛选条件:近1天内、指定发件人、指定主题、未读
received_dt = datetime.now() - timedelta(days=1)
received_dt_str = received_dt.strftime('%m/%d/%Y %H:%M %p')
filter_str = f"[ReceivedTime] >= '{received_dt_str}' AND [SenderEmailAddress] = 'Info@gmail.com' AND [Subject] = 'Sample Report' AND [UnRead] = True"
messages = messages.Restrict(filter_str)

# 按接收时间降序排序,取最新5封
messages.Sort("[ReceivedTime]", True)  # True表示降序
latest_messages = messages[:5]

# 存储正文的变量(用列表存储多封邮件的正文)
email_bodies = []

try:
    for msg in latest_messages:
        # 标记邮件为已读(可选,根据需求调整)
        # msg.UnRead = False
        # msg.Save()
        
        # 获取邮件正文并加入列表
        email_bodies.append(msg.Body)
        # 可选:打印发件人、主题、接收时间用于验证
        print(f"发件人: {msg.SenderEmailAddress}")
        print(f"主题: {msg.Subject}")
        print(f"接收时间: {msg.ReceivedTime}")
        print("---")
except Exception as e:
    print(f"处理邮件时出错: {str(e)}")

# 输出结果示例
print("存储的邮件正文数量:", len(email_bodies))
if email_bodies:
    print("第一封邮件正文预览:", email_bodies[0][:500] + "..." if len(email_bodies[0])>500 else email_bodies[0])

关键修改说明

  • 新增未读筛选:在过滤条件中加入[UnRead] = True,确保只处理未读邮件
  • 排序取最新:通过Sort方法按接收时间降序排列,再用切片[:5]获取最新的5封邮件
  • 正文存储逻辑:用列表email_bodies统一存储每封邮件的正文,方便后续处理
  • 修复语法错误:修正原代码的缩进问题,移除错误的for body in message.Body循环(message.Body是字符串,直接访问即可)
  • 合并筛选条件:将多个Restrict调用合并为一个条件字符串,提升Outlook对象的处理效率
  • 可选标记已读:如果需要将读取后的邮件标记为已读,取消注释msg.UnRead = False和msg.Save()代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 07:05:34