#python #loops #datetime #email #outlook
#python #циклы #дата и время #Адрес электронной почты #outlook
Вопрос:
Я пытаюсь добиться следующего, используя python: получить последние 24 часа входящих сообщений Outlook от конкретного отправителя и проверить, представлен ли конкретный текст в теле этого письма
ниже я попробовал :
import sys, win32com.client, datetime
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
s = outlook.GetDefaultFolder(6).Items
# Get yesterdays date for the purpose of getting emails from this date
d = (datetime.date.today() - datetime.timedelta (days=1)).strftime("%d-%m-%y")
# get the email/s
msg = s.GetLast()
# Loop through emails
while msg:
# Get email date
date = msg.SentOn.strftime("%d-%m-%y")
# Set the critera for whats wanted
if (d == date) and ("MAINTENANCE" in msg.body) and ("Upgrade" in msg.Subject) and msg.Sender == "aa@bb.com" :
print("Date : ", date)
msg = s.GetPrevious()
ошибка :
дата = сообщение.SentOn.strftime(«%d-%m-%y») Файл «C:Users1024983AppDataLocalProgramsPythonPython37libsite-packageswin32comclientdynamic.py» , строка 527, в getattr вызывает ошибку атрибута(«%s.%s» % (self.username, attr)) Ошибка атрибута: getPrevious.SentOn
и не уверен, в чем ошибка в строке проверки
if (d == date) and ("MAINTENANCE" in msg.body) and ("Upgrade" in msg.Subject) and msg.Sender == "aa@bb.com" :
Ответ №1:
Во-первых, никогда не перебирайте все элементы в папке — вы бы не использовали оператор SELECT в SQL без предложения WHERE, не так ли? Всегда используйте Items.Find/FindNext
или Items.Restrict
.
Во-вторых, Sender
это не скалярное (строковое) свойство — оно возвращает object ( AddressEntry
) , поэтому то, что вы хотите MailItem.Sender.Address
(после проверки, что MailItem.Sender
нет null).
В-третьих, помимо MailItem
объектов в папке входящих сообщений, у вас также могут быть другие элементы, такие как MeetingItem
и ReportItem
, которые могут не раскрывать все свойства, к которым вы обращаетесь (например, Sender
). Если вам нужны только MailItem
объекты, убедитесь, что Class
свойство (доступное для всех объектов ООМ) == 43 ( OlObjectClass.olMail
).