使用 python 保存 Outlook 附件
save outlook attachments with python
每个星期一我都会收到主题标题略有变化的附件。主题标题的固定部分是 PB Report 并将具有星期一的日期。例如,我在本周一收到了主题为 PB Report - 13.12.2021 的电子邮件,上周收到了主题为 PB Report - 06.12.2021 等等。我想在此代码中实现 GetLast
以便仅获取最新发送的报告。另外,我如何告诉 python 搜索以 PB Report 开头的主题而不看标题的其余部分。我尝试将通配符 (*) 作为 save_attachments('PB Report*')
但没有成功。
import datetime
import os
import win32com.client
path = r"C:/Users/greencolor/Desktop/Autoreport/"
today = datetime.date.today()
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder(6)
messages = inbox.Items
def save_attachments(subject):
for message in messages:
if message.Subject == subject:
for attachment in message.Attachments:
print(attachment.FileName)
attachment.SaveAsFile(os.path.join(path, str(attachment)))
if __name__ == "__main__":
save_attachments('PB Report - 13.12.2021')
我也有替代代码,但是当我运行这个代码时,我从来没有得到结果也没有错误。需要。
import os
import win32com.client
path = r"C:/Users/greencolor/Desktop/Autoreport/"
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder(6)
messages = inbox.Items
message = messages.GetLast()
while message:
if 'PB' in message.subject and 'Report' in message.subject:
for attachment in message.Attachments:
print(attachment.FileName)
attachment.SaveAsFile(os.path.join(path, str(attachment)))
参数 subject
的通配符将不起作用,因为在比较 message.Subject == subject
.
中的相等性时,参数 subject
用作字符串
您可以在邮件主题上使用字符串方法 startswith
,例如 message.Subject.startswith(subject_prefix)
并使用 save_attachments('PB Report - ')
.
等通用前缀调用您的方法
进一步使用attachment.FileName
构建输出文件路径。
您可以使用 GetLast()
或 Sort()
和适当的消息 属性 来筛选 最新发送的报告。或者您可以解析邮件主题中的日期并相应地对它们进行排序。然而,这值得另一个问题、自己的研究和进一步的规范和关注。
解决方案
示例解决方案如下(请参阅评论进行调整):
def save_attachments(subject_prefix): # changed parameter name
messages.Sort("[ReceivedTime]", True) # sort by received date: newest to oldest
for message in messages:
if message.Subject.startswith(subject_prefix): # changed test
print("saving attachments for:", message.Subject)
for attachment in message.Attachments:
print(attachment.FileName)
attachment.SaveAsFile(os.path.join(path, str(attachment.FileName))) # changed to file-name
return # exit after first matched message
如果您知道邮件只包含所需的邮件,则可以使用 GetLast()
,并按日期排序。
message = messages.GetLast()
while message: # to test if there is a (last) message at all
# save attachment
相关问题
- str.startswith with a list of strings to test for
- Search the entire Outlook email box for specific emails using Python
每个星期一我都会收到主题标题略有变化的附件。主题标题的固定部分是 PB Report 并将具有星期一的日期。例如,我在本周一收到了主题为 PB Report - 13.12.2021 的电子邮件,上周收到了主题为 PB Report - 06.12.2021 等等。我想在此代码中实现 GetLast
以便仅获取最新发送的报告。另外,我如何告诉 python 搜索以 PB Report 开头的主题而不看标题的其余部分。我尝试将通配符 (*) 作为 save_attachments('PB Report*')
但没有成功。
import datetime
import os
import win32com.client
path = r"C:/Users/greencolor/Desktop/Autoreport/"
today = datetime.date.today()
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder(6)
messages = inbox.Items
def save_attachments(subject):
for message in messages:
if message.Subject == subject:
for attachment in message.Attachments:
print(attachment.FileName)
attachment.SaveAsFile(os.path.join(path, str(attachment)))
if __name__ == "__main__":
save_attachments('PB Report - 13.12.2021')
我也有替代代码,但是当我运行这个代码时,我从来没有得到结果也没有错误。需要。
import os
import win32com.client
path = r"C:/Users/greencolor/Desktop/Autoreport/"
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder(6)
messages = inbox.Items
message = messages.GetLast()
while message:
if 'PB' in message.subject and 'Report' in message.subject:
for attachment in message.Attachments:
print(attachment.FileName)
attachment.SaveAsFile(os.path.join(path, str(attachment)))
参数 subject
的通配符将不起作用,因为在比较 message.Subject == subject
.
subject
用作字符串
您可以在邮件主题上使用字符串方法 startswith
,例如 message.Subject.startswith(subject_prefix)
并使用 save_attachments('PB Report - ')
.
进一步使用attachment.FileName
构建输出文件路径。
您可以使用 GetLast()
或 Sort()
和适当的消息 属性 来筛选 最新发送的报告。或者您可以解析邮件主题中的日期并相应地对它们进行排序。然而,这值得另一个问题、自己的研究和进一步的规范和关注。
解决方案
示例解决方案如下(请参阅评论进行调整):
def save_attachments(subject_prefix): # changed parameter name
messages.Sort("[ReceivedTime]", True) # sort by received date: newest to oldest
for message in messages:
if message.Subject.startswith(subject_prefix): # changed test
print("saving attachments for:", message.Subject)
for attachment in message.Attachments:
print(attachment.FileName)
attachment.SaveAsFile(os.path.join(path, str(attachment.FileName))) # changed to file-name
return # exit after first matched message
如果您知道邮件只包含所需的邮件,则可以使用 GetLast()
,并按日期排序。
message = messages.GetLast()
while message: # to test if there is a (last) message at all
# save attachment
相关问题
- str.startswith with a list of strings to test for
- Search the entire Outlook email box for specific emails using Python