Python-Outlook保存电子邮件而不是全部保存



当我运行脚本时,下面的代码会保存特定文件夹中的电子邮件-但是,如果文件夹中有5或6封电子邮件,我必须运行两次才能将其全部清除-似乎无法正常工作-这是我使用的python版本,我过去使用VBA版本,情况也是如此-所以我认为这是前景造成的问题,或者是我对两者的编码错误版本

from win32com.client import Dispatch
from datetime import datetime
from zipfile import ZipFile
from os import remove, listdir, rename, rmdir
from uuid import uuid4
import webbrowser
OUTLOOK = Dispatch("Outlook.Application").GetNamespace("MAPI")
BUSINESS_OBJECTS = OUTLOOK.Folders.Item(2).Folders['Inbox'].Folders['4. Regional'].Folders['Business Objects']
DIR = "\\GB998K12FPS01\HomeDir$\user001\Desktop\Exports\Outlook attachments"
count = 0
for email in BUSINESS_OBJECTS.Items:
timestamp = str(datetime.fromtimestamp(email.ReceivedTime.timestamp())).replace(":", "-")
for attachment in email.attachments:
filename = "{}\{} {}".format(DIR, timestamp, attachment.FileName)
attachment.SaveAsFile(filename)
if attachment.FileName.split(".")[-1] == "zip":
TEMP_FOLDER = "{}\{}\".format(DIR, uuid4())
with ZipFile(filename, "r") as zipped:
zipped.extractall(TEMP_FOLDER)
for file in listdir(TEMP_FOLDER):
rename(TEMP_FOLDER + file, "{}\..\{} {}".format(TEMP_FOLDER, timestamp, file))
remove(filename)
rmdir(TEMP_FOLDER)
if len(email.attachments) > 0:
email.UnRead = False
email.delete()
count += 1
print("Complete! Processed {} emails!".format(count))
input()
webbrowser.open("\\GB998K12FPS01\HomeDir$\user001\Desktop\Exports\Outlook attachments"
any ideas would be greatly apprciated

考虑以下可能的情况:

  1. Outlook文件夹可能包含不同类型的项目,因此集合可能包含邮件项目、文档项目、约会项目等。因此,我建议在进一步处理之前检查项目类型。

  2. 遍历文件夹中的所有项目并不是一个好主意:

for email in BUSINESS_OBJECTS.Items

相反,您可以考虑使用Items类的Find/FindNextRestrict方法,这些方法只允许获取与您的条件相对应的项。在以下文章中阅读更多关于这些方法的信息:

  • 如何:使用Find和FindNext方法从文件夹中检索Outlook邮件项目(C#、VB.NET(
  • 如何:使用Restrict方法从文件夹中检索Outlook邮件项目
  1. 我还注意到共享文件夹用于保存附加文件:
DIR = "\\GB998K12FPS01\HomeDir$\user001\Desktop\Exports\Outlook attachments"
...
filename = "{}\{} {}".format(DIR, timestamp, attachment.FileName)
attachment.SaveAsFile(filename)

请使用本地文件夹来保存附加的文件。

无论如何,为了理解为什么没有处理所有项目并将附加文件保存到磁盘,我建议在代码中添加任何日志语句,这样您就可以查看日志并了解代码失败的原因。

最新更新