Python3 извлекает электронные письма после определенной даты, используя MAPI - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь создать скрипт, который извлекает электронные письма из определенной папки после определенной даты.У меня есть текстовый документ dateLastRan.txt, в котором хранится дата последнего запуска этого скрипта.Данные там будут сродни 2018-09-18.

Я беру дату из документа и беру дату сообщений.Я надеялся выводить только электронные письма, которые были старше dateLastRan, но мое сравнение жалуется.И да, я новичок в питоне.Спасибо за любой совет!

  if(msgDate>dateLastRan):  
TypeError: unorderable types: datetime.date() > str()

Я уважаю ошибку, но как ее обойти?Соответствующий код ниже:

    import win32com.client
    import datetime
    import re

    badUrl = []

    outlook = win32com.client.Dispatch("Outlook.Application")
    namespace = outlook.GetNamespace("MAPI")
    your_folder = namespace.Folders.Item(1)

    folder = 'ANY' #change this entry to match a folder found within Inbox

    inbox = your_folder.Folders['Inbox'].Folders[folder]    


    dateLastRan = '1991-01-01' #used to initialize datelastran
    todaysDate = (datetime.date.today())    #used to determine where to pick back up
    startDate = '1991-01-01'#used to initialize startDate

   #Grab Last Date Ran from file
    try:
        with open('lastDateRan.txt', 'r') as infile:
            for date in infile:
                dateLastRan = date
    except Exception as err:
        print ("lastDateRan.txt not found", '\n')

    print("Date Last Ran = ", dateLastRan, '\n')


    all_messages = inbox.Items   


    print("Pulling URLs from folder:",folder,'\n')

    for message in all_messages:
            msgDate = message.senton.date() #get date of message
            print("msg date: ", msgDate)
            print("datelastran: ",dateLastRan)
            if(msgDate>dateLastRan): #<<<<<Comparison here
                print("woot")
                #do stuff

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Так что я закончил тем, что todaysDate.replace('-','') удалил тире и int(todaysDate) произвел число.Для даты, которую я взял из файла, я должен был использовать dateLastRan = re.sub('-', '', dateLastRan), потому что .replace был не пригоден для использования, а затем следовал за этим с int(dateLastRan).Я мог тогда сравнить должным образом и только коснуться электронных писем после даты последней даты.Это не учитывает время суток, но пока работает.

0 голосов
/ 19 сентября 2018

Типы даты и типы строк нельзя сравнивать.dateLastRan = '1991-01-01' является типом String.Так что вам нужно преобразовать в datetime Тип.

Пожалуйста, обратитесь к этому коду:

begin = datetime.date(2018, 9, 17)  #year, month, day
end = datetime.date(2018, 9, 18)
if(begin > end):
  print("False")
else:
  print("True")
...