如何用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
相关产品推荐
相关产品推荐

