Python3使用MAPI将电子邮件拉到特定日期

时间:2018-09-18 21:08:25

标签: python outlook

我正在尝试创建一个脚本,该脚本在某个日期之后从某个文件夹中提取电子邮件。我有一个文本文件dateLastRan.txt,其中存储了该脚本上次运行的日期。其中的数据类似于2018-09-18。

我从文档中获取日期,并且从邮件中获取日期。我希望只输出dateLastRan之后的电子邮件,但是我的比较抱怨。是的,我是python的新手。感谢您的任何建议!

  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 :(得分:0)

日期类型和字符串类型无法比较。 dateLastRan ='1991-01-01'是String类型。因此,您需要转换为日期时间类型。

请参考此代码:

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

答案 1 :(得分:0)

所以我最终要做的是todaysDate.replace('-','')删除破折号,然后int(todaysDate)进行数字转换。对于我从文件中获取的日期,我不得不使用dateLastRan = re.sub('-', '', dateLastRan),因为.replace不可用,然后再加上int(dateLastRan)。然后,我可以进行正确比较,仅在lastDate日期之后触摸电子邮件。 这没有考虑到一天中的时间,但是现在可以使用了。