Я пытаюсь загрузить вложения из Outlook с помощью Python, на данный момент я могу загружать вложения по строке темы, но в моем случае я хочу загрузить несколько вложений из нескольких писем, где строка темы начинается с некоторой строки, например: Вот такие темы: запрос 123654, запрос 56975, запрос 5698, и я хочу загрузить их все, у которых имя темы начинается с «Запрос». Мой текущий код ниже:
from win32com.client import Dispatch
outlook = Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder("6")
all_inbox = inbox.Items
val_date = datetime.date.today()
sub_today = 'Query 123654'
att_today = ''
for msg in all_inbox:
if msg.Subject == sub_today and msg.Senton.date() == val_date:
break
for att in msg.Attachments:
if att.FileName == att_today:
break
try:
att.SaveAsFile('C:\\Offline Feeds\\Attachments' + '\\'+ att.FileName)
messagebox.showinfo("SUCCESSFUL","Attachments Downloaded")
except:
messagebox.showerror("ERROR","Attachment Download Failed")
Вы можете использовать find () для поиска определенных данных.
sub_today = 'Query'
if msg.Subject.find(sub_today) != -1 break
Если тема не включает «Запрос», она вернет «-1».
Это полный код:
from win32com.client import Dispatch
outlook = Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder("6")
all_inbox = inbox.Items
val_date = datetime.date.today()
sub_today = 'Query'
att_today = ''
for msg in all_inbox:
if msg.Subject.find(sub_today) != -1 and msg.Senton.date() == val_date:
break
for att in msg.Attachments:
if att.FileName == att_today:
break
try:
att.SaveAsFile('C:\\Offline Feeds\\Attachments' + '\\'+ att.FileName)
messagebox.showinfo("SUCCESSFUL","Attachments Downloaded")
except:
messagebox.showerror("ERROR","Attachment Download Failed")
Для получения дополнительной информации перейдите по этой ссылке:
Вы можете попробовать search_result = msg.Subject.find (sub_today), если msg.Senton.date () == val_date и search_result! = -1: break
Этот код не работает и вызывает ошибку «AttributeError: <unknown> .Senton». Я даже пробовал «if sub_today в msg.Subject и msg.Senton.date () == val_date: break», но при загрузке атрибута первого письма нет из всех. Я даже пробовал запускать вложенный цикл for несколько раз, но без изменений.
спасибо за модификацию @Alina Li, но если msg.Subject.find (sub_today)! = -1 и msg.Senton.date () == val_date: не работает должным образом (вместо этого загружаются все вложения, начинающиеся с 'Query') это только загрузка вложения электронного письма, которое было отправлено первым из нескольких писем.