我正在尝试提取outlook邮箱中特定文件夹中所有电子邮件的接收日期列表(打算稍后过滤特定日期)。我是一个完全的Python初学者,我已经成功地进入了正确的子文件夹,并可以拉出一个列表,然而,该列表是由相同的接收日期和时间一遍又一遍地组成的-整个列表是一个单一的日期。我已经通过拉主题行来检查了这一点,它绝对只是从单个电子邮件中拉出来,并在整个列表中重复它。
我如何让列表包含文件夹中所有邮件的所有收到日期而不是只有一个?
import win32com.client
import os
from datetime import datetime, timedelta, date
outlook = win32com.client.Dispatch("Outlook.Application").GetNameSpace("MAPI")
mailbox = outlook.Folders.Item("$OutlookMailbox")
inbox = mailbox.Folders.Item("Inbox")
pega = inbox.Folders.Item("InboxSubfolder")
messages = InboxSubfolder.Items
message = messages.GetFirst()
subject = message.subject
sender = message.sender
received_date = message.ReceivedTime
for message in messages:
print(received_date)
"
我试过:消息。
- 列表()
- GetLast ()
- GetNext ()
- GetPrevious ()
没有改变输出
Issue
什么时候定义received_date
在有注释的行下面。行在循环之外,日期来自第一个消息。所以它在循环过程中保持不变——除非你在循环中给它赋值new。
messages = InboxSubfolder.Items
message = messages.GetFirst()
subject = message.subject
sender = message.sender
received_date = message.ReceivedTime # date of first message
for message in messages:
print(received_date)
相似的解决方案你试过了吗?
# Count all items in the sub-folder
item_count = InboxSubfolder.Items.Count
if item_count > 0:
for i in range(item_count, 0, -1):
message = InboxSubfolder.Items[i]
print(message.received_date) # received date from current message
我在Python Outlook中找到它-在文件夹- pywin32 | EXCELCISE中循环Outlook电子邮件。有一个链接到GitHub repo与示例iterate_emails_in_a_folder.py
。
备选方案:使用迭代器方法(GetFirst
和GetNext
)
看到如何使用Python逆序浏览Outlook邮件
message = messages.GetFirst()
while message: # find a suitable exit-condition!
message = messages.GetNext()