我正在使用Python 3。 我试图按日期提取(列表/打印节目)Outlook电子邮件。
我正在尝试循环..可能是WHILE或IF语句。
可以这样做,因为一个字符串,另一个是日期。 请介绍我到目前为止所得到的内容:谢谢。
1. import win32com.client, datetime
2.
3. # Connect with MS Outlook - must be open.
4. outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
5. # connect to Sent Items
6. sent = outlook.GetDefaultFolder(5).Items # "5" refers to the sent item of a folder
7.
8. # Get yesterdays date
9. y = (datetime.date.today () - datetime.timedelta (days=1))
10. # Get emails by selected date
11. if sent == y:
12. msg = sent.GetLast()
13. # get Subject line
14. sjl = msg.subject
14. # print it out
15. print (sjl)
答案 0 :(得分:1)
outlook API有一个方法audio snippet,用于搜索.Items
的内容。如果这是你想要做的程度,那可能就是你应该怎么做。
现在看来你的if语句正在检查电子邮件是否等于昨天。
微软的文档说.Items
正在返回一组电子邮件,您首先必须使用几种不同的方法(包括Items.GetNext
)或使用Items.Item
引用特定索引来迭代这些电子邮件。
然后,您可以获取当前的电子邮件并访问Items.Find
currentMessage = sent.GetFirst()
while currentMessage:
if currentMessage.SentOn == y:
sjl = currentMessage.Subject
print(sjl)
currentMessage = sent.GetNext()
这应该遍历已发送文件夹中的所有邮件,直到sent.GetNext()
没有更多邮件返回。您必须确保y
与.SentOn
返回的格式相同。
如果您不想遍历每条消息,您可能还会嵌套两个循环,这些循环返回到消息中,直到它到达昨天,迭代直到它不再在“昨天”之内,然后中断。
答案 1 :(得分:1)
我已经完成了代码。谢谢你的帮助。
{{1}}
这很有效。但是如果找不到根据约束的消息,它就不会退出。我试过休息,只找到一条消息,而不是全部,我想知道是否以及如何做一个例外?或者,如果我尝试其他d!=日期,它也可以工作(它不会找到任何东西)。 我看不到For循环可以使用带有msg(字符串)的日期。 我不确定 - 这里的巨人:) ??
答案 2 :(得分:0)
COM API文档相当透彻,您可以看到类列表,例如here。它还记录了您可以用来操纵它拥有的对象的各种方法。在您的特定示例中,您所追求的是通过日期限制您的项目集。您将看到项目类here中已有一个函数。方便地称它为Restrict。我能看到的唯一问题就是你需要在字符串形式中指定你想要的过滤器,因此需要你自己构建字符串。
例如,继续您的代码并按时间限制:
#first create the string filter, here you would like to filter on sent time
#assuming you wanted emails after 5 pm as an example and your date d from the code above
sFilter = "[SentOn] > '{0} 5:00 PM'".format(d)
#then simply retrieve your restricted items
filteredEmails = s.Restrict(sFilter)
您当然可以通过各种标准进行限制,只需查看该功能的文档即可。这样,如果您限制并返回一组空项,则可以在代码中处理该情况,而不必使用异常。例如:
#you have restricted your selection now want to check if you have anything
if filteredEmails.Count == 0:
#handle this situation however you would like