下载电子邮件附件后停止while循环-python



我有下面的python代码,可以从outlook收件箱的子文件夹COC下载附件。代码运行良好,但在下载完所有附件后不会停止。我该怎么修。


import win32com.client
import os
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox=outlook.GetDefaultFolder(6).folders("COC") # "6" refers to the index of a folder - in this case the inbox. You can change that number to reference
messages = inbox.Items
message = messages.GetFirst()

while True:

try:
print (message)
attachments = message.Attachments
attachment = attachments.Item(1)
attachment.SaveASFile(os.getcwd() + '\' + str(attachment)) #Saves to the attachment to current folder
print (attachment)
message = messages.GetNext()

except:
message = messages.GetNext()

使用for循环而不是while循环

for message in messages:
try:
attachments = message.Attachments
attachment = attachments.Item(1)
attachment.SaveASFile(os.getcwd() + '\' + str(attachment)) #Saves to the attachment to current folder
print(attachment)
print(message)
except:
pass

只要条件保持为true,while循环将永远运行。只需增加循环以确保它在结束时变为false。例如,您可以在while循环上方设置一个变量状态,并将其设置为true。。。。。while循环的条件可以是while status==true。在循环结束时,将状态重新声明为==false

message.GetNext()方法指示不再有消息时,您可以更改条件以使用该条件而不是True,或者(如有必要(使用break语句退出循环。

顺便说一句,try/except忽略所有错误不是一个好主意;你应该只忽略你知道是可以的特定错误。


精确的代码取决于message.GetNext()如何指示不再有消息,您可以在文档中查找,也可以尝试查看;然而,假设它返回None,代码将如下所示:

message = messages.GetFirst()
while message is not None:
print (message)
# process the message, download the attachments etc
message = messages.GetNext()

最新更新