python - 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
解决方案
考虑以下可能的情况:
Outlook 文件夹可能包含不同类型的项目,因此集合可能包含邮件项目、文档项目、约会项目等。因此,我建议在进一步处理之前检查项目类型。
遍历文件夹中的所有项目并不是一个好主意:
for email in BUSINESS_OBJECTS.Items
相反,您可以考虑使用类的Find
/FindNext
或Restrict
方法,Items
只允许获取与您的条件相对应的项目。在以下文章中阅读有关这些方法的更多信息:
- 我还注意到共享文件夹用于保存附件:
DIR = "\\\\GB998K12FPS01\\HomeDir$\\user001\\Desktop\\Exports\\Outlook attachments"
...
filename = "{}\\{} {}".format(DIR, timestamp, attachment.FileName)
attachment.SaveAsFile(filename)
使用本地文件夹来保存附件。
无论如何,要了解为什么不是所有项目都被处理并将附加文件保存到磁盘,我建议将任何日志语句添加到代码中,这样您就可以查看日志并了解代码失败的原因。
推荐阅读
- php - 在 Woocommerce 存档页面上将产品标题移到产品图片上方
- url - 如何在 Prestashop 的 TPL 格式中添加 hreflang
- c# - 使用 C# 读取/写入包含可变大小二维数组的结构体
- java - 平均计算器“从浮点数到整数的可能有损转换” - Java 赋值
- php - 自动完成搜索输入(无法加载 https://proj.test/autocomplete-search?term=tes: No 'Access-Control-Allow-Origin)
- javascript - 允许嵌套在相对位置 div 中的绝对位置 html div 具有可滚动的溢出-y 内容和可见的溢出-x 内容
- ruby-on-rails - RAILS Prism gem 仅在直接 URL 或刷新页面时突出显示代码示例
- javascript - React ES6 App - 本地 API 调用
- ios - 谷歌视觉图像标签 API 错误
- hubspot - 通过 Hubspot API 获取页面浏览量