imap - how to delete messages

后端 未结 9 644
孤独总比滥情好
孤独总比滥情好 2020-12-14 08:00

How can I delete messages from the mail box? I am using this code, but the letters are not removed. Sorry for my English.

def getimap(self,server,port,login,         


        
相关标签:
9条回答
  • 2020-12-14 08:24

    This is the process workflow I use to either delete or keep emails in Outlook Inbox folder. Managing emails is a constant maintenance issue. Sometimes I have thousands of emails that I need to delete. I have created two python programs which will enable me to efficiently manage this process workflow.

    First - I write a python program to create a text and CSV file. The text and CSV file contains two parts.

    1. A count for each unique email.
    2. The unique sender email address.

    Second - I edit the text or CSV file to create two text files.

    1. EmailsToKeep.txt. A. Emails I want to keep with no delete condition. B. I will manage these emails manually.
    2. EmailsToKeepForAtLeast30Days.txt. A. Emails I want to keep or delete base on the date value of variable EndDy. I will append these two text files as needed.

    Third - I write a second python program to delete or keep emails based on four conditions.

    1. Delete emails that have no email address.

    2. Keep emails that are in the EmailsToKeep.txt text file.

    3. Keep or delete emails that are in the EmailsToKeepForAtLeast30Days.txt text file. A. Keep emails if date is newer than the date value of variable EndDy. B. Delete emails if date is older than the date value of variable EndDy.

    4. Delete emails that were not included in any of the EmailsToKeep.txt or EmailsToKeepForAtLeast30Days.txt text files. Video link: https://youtu.be/bTgb3tO5r-8

       First python program.
       ## ---------------------------------------------------------------------------
       ## Created by: James (Jamsey) P. Lopez
       ## Created date: 11/28/2020
       ## Modified date: 12/2/2020, 12/5/2020
       ## 
       #### This is the first python program of two
       #### Managing emails is a constant maintenance issue
       #### Sometimes I have thousands of emails that I need to delete
       #### This python programs will enable me to efficiently manage this process workflow
       ####
       #### I will create a dictionary of unique emails from the Inbox folder
       #### Then, create a for loop to create the TXT and CSV files
       #### I will edit the TXT or CSV file to create the final text files
       ####    The EmailsToKeep.txt and the EmailsToKeepForAtLeast30Days.txt
       ####        A. EmailsToKeep.txt is for emails I want to keep with no delete condition
       ####        B. EmailsToKeepForAtLeast30Days.txt is for emails that I want to keep based on the delete condition
       #### I will run this python program only once
       #### I will append these two text files as needed for the second python program
       ## ---------------------------------------------------------------------------
       import win32com.client, re, time, datetime, string
      
       ############################################################################################
       ############ Adding date to end of file name
       start_c = datetime.datetime.now(); ##print start_c
       c1 = (("%(start_c)s" % vars()).partition(' ')[0]); ##print c1
       new_str = string.replace(c1, '-', '_');new_str = "_"+new_str;##print(new_str)
      
       #### Path
       path = "S:\PythonProjects\EmailProject"
       Bslash = "\\"
      
       #### Text file
       EmailT = "EmailsTextFile"
       extt = ".txt"
       #### CSV file
       EmailC = "EmailsCSVFile"
       extc = ".csv"
      
       #### Full Text and CSV file name
       EmailTextFile = ("%(path)s%(Bslash)s%(EmailT)s%(new_str)s%(extt)s" % vars());print EmailTextFile
       EmailCSVFile = ("%(path)s%(Bslash)s%(EmailC)s%(new_str)s%(extc)s" % vars());print ("%(EmailCSVFile)s\n" %vars())
      
       #### Setting email
       outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
       inbox = outlook.GetDefaultFolder(6)
       messages = inbox.Items
       messages.Sort("[ReceivedTime]", True)
       m = messages.GetFirst()
      
       ############################################################################################
       ############ Create Text and CSV file if it does not exist or truncate if it does exist
       WriteEmailTextFile2=open('%(EmailTextFile)s' % vars(),'w')
       WriteEmailTextFile2.close()
       WriteEmailCSVFile2=open('%(EmailCSVFile)s' % vars(),'w')
       WriteEmailCSVFile2.close()
      
       #### Opening output Text and CSV files to append data
       WriteEmailTextFile=open('%(EmailTextFile)s' % vars(),'a')
       WriteEmailCSVFile=open('%(EmailCSVFile)s' % vars(),'a')
      
       #### Creating dictionary for all the emails in inbox
       #### This will create unique emails and how many times they are repeated
       d = dict()
      
       for m in messages:
           try:
               sender = m.SenderEmailAddress
               sender = sender.lower()
               if sender in d: 
                   ## Increment count of emails by 1 
                   d[sender] = d[sender] + 1
               else: 
                   ## Add the emails to dictionary with count 1 
                   d[sender] = 1
           except:
               pass
      
       #################################################
       #### Code to sort results in dictionary by sender email address
       from collections import OrderedDict 
       dict1 = OrderedDict(sorted(d.items()))
      
       #### For loop from sorted dictionary
       for key in dict1:
           #### d[key] contains the count for each unique sender email address
           #### key is the unique sender email address
           KeySelection = (d[key], key); ##print KeySelection
           #### Converting tuple to string so we can split
           KeySelection = str(KeySelection); ##print KeySelection
      
           #### Splitting the count and sender email address
           #### The split character = ,
           spl_char = ","
           ## Number of times the email sender is repeated
           EmailCount = KeySelection.rsplit(spl_char, 1)[0]
           ## Senders email name
           EmailName = KeySelection.rsplit(spl_char, 1)[-1]
           ##print s1; ##print s2
      
           ## Deleting characters and space/s
           ## All I need is the number of times (EmailCount) the sender email address is repeated
           ## and the senders email address (EmailName)
           EmailCount = re.sub(u"[(u') ]", '', EmailCount); ##print EmailCount
           EmailName = re.sub(u"[(u') ]", '', EmailName); ##print EmailName
      
           ## Writing line to TXT and CSV file
           line = ("%(EmailCount)s,%(EmailName)s\n" % vars())
           print line
           WriteEmailTextFile.write(line)
           WriteEmailCSVFile.write(line)
           ##time.sleep(2)
      
       #### Closing write files
       WriteEmailTextFile.close()
       WriteEmailCSVFile.close()
      
      
      
       Second python program.
       ## ---------------------------------------------------------------------------
       #### Created by: James (Jamsey) P. Lopez
       #### Created date: 11/28/2020
       #### Modified date: 11/29/2020; 11/30/2020; 12/3/2020
       #### 
       #### This is the second python program of two
       #### Managing emails is a constant maintenance issue
       #### Sometimes I have thousands of emails that I need to delete
       #### This python programs will enable me to efficiently manage this process workflow
       ####
       #### This program uses two text files to accomplish my goal
       #### A. EmailsToKeep.txt is for emails I want to keep with no delete condition
       ####            I will manage these emails manually
       #### B. EmailsToKeepForAtLeast30Days.txt is for emails that I want to keep based on the delete condition
       ####            The delete condition is set to the variable End30
       #### I will append these two text files as needed
       ####
       #### Email maintenance conditions
       #### 1. Delete emails that have no email address
       #### 2. Keep emails that are in the EmailsToKeep.txt text file
       #### 3. Keep emails that are in the EmailsToKeepForAtLeast30Days.txt text file
       ####    A. Keep emails that are newer and equal to the value of variable End30
       ####    B. Delete the emails that are older than the value of variable End30
       #### 4. Delete emails that were not included in any of the EmailsToKeep.txt or EmailsToKeepForAtLeast30Days.txt text files
       ## ---------------------------------------------------------------------------
       import win32com.client, datetime, string, time
       from datetime import datetime, date, timedelta
      
       ############################################################################################
       ############ Adding date to end of file name
       start_c = datetime.now(); ##print start_c
       c1 = (("%(start_c)s" % vars()).partition(' ')[0]); ##print c1
       new_str = string.replace(c1, '-', '_');new_str = "_"+new_str; ##print(new_str)
      
       #### Path
       path = "S:\PythonProjects\EmailProject"
       Bslash = "\\"
      
       #### Text file extension
       extt = ".txt"
      
       #### Existing text file of emails to keep
       EmailKTF = "EmailsToKeep"
       EmailKTFTextFile = ("%(path)s%(Bslash)s%(EmailKTF)s%(extt)s" % vars()); ##print EmailKTFTextFile
      
       #### Existing text file of emails used to delete specific emails after meeting delete condition
       TextFile30Day = "EmailsToKeepForAtLeast30Days"
       EmailTextFile30Day = ("%(path)s%(Bslash)s%(TextFile30Day)s%(extt)s" % vars()); ##print EmailTextFile30Day
      
       #### The delete text file
       EmailT = "EmailsDeletedTextFile"
       EmailTextFile = ("%(path)s%(Bslash)s%(EmailT)s%(new_str)s%(extt)s" % vars()); ##print EmailTextFile
      
       ############################################################################################
       ############ Create delete text file if it does not exist or truncate if it does exist
       WriteEmailTextFile2=open('%(EmailTextFile)s' % vars(),'w')
       WriteEmailTextFile2.close()
      
       #### Opening delete text files to write deleted emails
       WriteEmailTextFile=open('%(EmailTextFile)s' % vars(),'a')
      
       ############ The delete condition below
       ############ Creating the date that will determine which emails will be deleted
       cur_date = datetime.today()
      
       #### Days to keep
       Dy = 21
       datedays = cur_date-timedelta(days=Dy)
       EndDy = "{}".format(datedays.strftime("%m/%d/%Y 00:00:00"))
       EndDy = '"' + EndDy + '"'; ##print End30
      
       #### Counters
       TotalEmailsRead = 0
       TotalEmailInRead = 0
       TotalEmailsDeleted = 0
      
       #### Setting email
       outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
       inbox = outlook.GetDefaultFolder(6)
       messages = inbox.Items
       messages.Sort("[ReceivedTime]", True)
       m = messages.GetFirst()
      
       #### Loop for emails     
       for m in list(messages):
           TotalEmailsRead += 1
      
           EmailDate = m.ReceivedTime; ##print EmailDate
           EmailDate = datetime.strptime(str(EmailDate), '%m/%d/%y %H:%M:%S'); ##print EmailDate
           EmailDate = EmailDate.strftime('%m/%d/%Y %H:%M:%S'); ##print EmailDate
           EmailDate = '"' + EmailDate + '"'; ##print EmailDate;print End30
      
           sender = m.SenderEmailAddress
           sender = sender.lower()
      
       ##    if sender == "alert@indeed.com" and EmailDate < End30:
       ##        print ("\n      AAAAAAA - Email = %(sender)s - Email Date = %(EmailDate)s - %(End30)s is the Cut off date" % vars())
       ##    print ("\n      BBBBBBB - %(EmailDate)s - %(End30)s - %(sender)s" % vars())
      
           KTF = open('%(EmailKTFTextFile)s' % vars(), 'r')
           TF30 = open('%(EmailTextFile30Day)s' % vars(), 'r')
           if sender == "":
               TotalEmailInRead += 1
       ##        print ("\n    1111  Deleted - Email sender is blank" % vars())
               line = ("No Sender : %(EmailDate)s\n" % vars())
               WriteEmailTextFile.write(line)
               m.Delete()
               TotalEmailsDeleted += 1
               time.sleep(.25)
           elif sender in KTF.read():
               TotalEmailInRead += 1
       ##        print ("\n2222 %(sender)s : %(EmailDate)s - IS IN %(EmailKTF)s text file" % vars())
               time.sleep(.25)
           elif sender in TF30.read():
               TotalEmailInRead += 1
       ##        print ("\n3333 %(sender)s : %(EmailDate)s - IS IN %(TextFile30Day)s text file" % vars())
               if EmailDate < EndDy:
       ##            print ("\n    4444 Deleted - %(sender)s : %(EmailDate)s : %(EndDy)s - IS IN %(TextFile30Day)s text file" % vars())
                   line = ("%(sender)s : %(EmailDate)s : %(EndDy)s - IS IN email 30 day text file\n" % vars())
                   WriteEmailTextFile.write(line)
                   m.Delete()
                   TotalEmailsDeleted += 1
                   time.sleep(.25)
           else:
               TotalEmailInRead += 1
       ##        print ("\n    5555  Deleted - %(sender)s : %(EmailDate)s - IS NOT IN the %(EmailKTF)s and %(TextFile30Day)s text files" % vars())
               line = ("%(sender)s : %(EmailDate)s - IS NOT IN any of the read email text files\n" % vars())
               WriteEmailTextFile.write(line)
               m.Delete()
               TotalEmailsDeleted += 1
               time.sleep(.25)
           KTF.close()
           TF30.close()
      
       WriteEmailTextFile.close()
      
       print 'This is the total number of emails read from Outlook Inbox = ' + str(TotalEmailsRead)
       print 'This is the total number of emails processed in if statements = ' + str(TotalEmailInRead)
       print 'This is the total number of emails deleted in if statements = ' + str(TotalEmailsDeleted)
      
    0 讨论(0)
  • 2020-12-14 08:25

    Try to use https://github.com/ikvk/imap_tools

    from imap_tools import MailBox 
    # DELETE all messages from INBOX
    with MailBox('imap.mail.com').login('test@mail.com', 'password', 'INBOX') as mailbox:
        mailbox.delete([msg.uid for msg in mailbox.fetch()])
    
    0 讨论(0)
  • 2020-12-14 08:40

    This is what works for me, and it is really fast as I don't delete each email individually (store) but pass the list index instead. This works for gmail personal as well as enterprise (Google Apps for Business). It first selects the folder/label to use m.list() will show you all available. It then searches for emails over a year old, and performs a move to trash. It then flags all the emails in trash with the delete flag and expunges everything:

    #!/bin/python
    
    import datetime
    import imaplib
    
    m = imaplib.IMAP4_SSL("imap.gmail.com")  # server to connect to
    print "Connecting to mailbox..."
    m.login('gmail@your_gmail.com', 'your_password')
    
    print m.select('[Gmail]/All Mail')  # required to perform search, m.list() for all lables, '[Gmail]/Sent Mail'
    before_date = (datetime.date.today() - datetime.timedelta(365)).strftime("%d-%b-%Y")  # date string, 04-Jan-2013
    typ, data = m.search(None, '(BEFORE {0})'.format(before_date))  # search pointer for msgs before before_date
    
    if data != ['']:  # if not empty list means messages exist
        no_msgs = data[0].split()[-1]  # last msg id in the list
        print "To be removed:\t", no_msgs, "messages found with date before", before_date
        m.store("1:{0}".format(no_msgs), '+X-GM-LABELS', '\\Trash')  # move to trash
        print "Deleted {0} messages. Closing connection & logging out.".format(no_msgs)
    else:
        print "Nothing to remove."
    
    #This block empties trash, remove if you want to keep, Gmail auto purges trash after 30 days.
    print("Emptying Trash & Expunge...")
    m.select('[Gmail]/Trash')  # select all trash
    m.store("1:*", '+FLAGS', '\\Deleted')  #Flag all Trash as Deleted
    m.expunge()  # not need if auto-expunge enabled
    
    print("Done. Closing connection & logging out.")
    m.close()
    m.logout()
    print "All Done."
    
    0 讨论(0)
  • 2020-12-14 08:41

    I think you should mark the emails to be deleted, first.. For example:

    for num in data[0].split():
       box.store(num, '+FLAGS', '\\Deleted')
    box.expunge()
    
    0 讨论(0)
  • 2020-12-14 08:41

    Here is a program I wrote, based on the code above:

    https://github.com/AndrewDJohnson/py-purge-email/

    import imaplib
    import sys
    import traceback
    import datetime
    import re
    from getpass import getpass
    
    """
    PyPurge Email V1.0
    ==================
    Andrew Johnson
    ad.johnson@ntlworld.com
    06 Nov 2019
    
    
    This Python 3 program will scan an email account using IMAP for messages older than
    a certain age and delete them.
    
    Old email can be deleted from all folders or each folder.
    
    Because of the length of time bulikng deleting takes, folders can be scanned first
    then the deletions can be left running (which might take several hours for many
    thousands of messages.)
    
    After running this, you may need to "empty" your deleted items/Trash folder to recover the space.
    With hotmail/live/outlook accounts (i.e. online Microsoft ones) you will need to manually empty "recoverable items" too.
    This is done within the "deleted items" folder when viewing your webmail.
    
    """
    
    #You can hardcode your IMAP settings here, or they can be entered interactively.
    #If "user" is set to a non-empty value, it is assumed the other values are set
    #and so they are not requested  interactively.
    host = ''
    #Port 993 is normally the port for SSL comms for IMAP
    port = 993
    user=''
    password = ''
    
    #This is a list of the 3 most common email providers.
    imap_hosts=[["GMail","imap.gmail.com","Trash"],
                ["Hotmail, Live, Outlook","imap-mail.outlook.com","Deleted"],
                ["Yahoo","imap.mail.yahoo.com","Trash"]]
    #We default to checking for email that is older than 1 year.
    days_old=365
    deleted_mail_folder_name="Trash"
    
    
    
    #This expression and function parse the mailbox data returned by the IMAP server
    list_response_pattern = re.compile(r'\((?P<flags>.*?)\) "(?P<delimiter>.*)" (?P<name>.*)')
    def parse_list_response(line):
    
        flags, delimiter, mailbox_name = list_response_pattern.match(line).groups()
        mailbox_name = mailbox_name.strip('"')
        if flags.lower().find("noselect") >= 0:
            mailbox_name=""  
        return (flags, delimiter, mailbox_name)
    
    #This function will iterate through the folders on the IMAP server and check
    #or delete email.
    def do_folders(imap,days_old,check_or_del,deletion_list):
        #Confirm any deletion of emails.
        if check_or_del != "check":
            resp = input ("Are you sure you want to delete emails? (Enter 'Yes') to confirm)>>>")
            if resp.lower()!="yes":
                return
    
        #Get the folder list from the server
        resp, data = imap.list()
        totalMsgs = 0
        actioned= "Nothing to do!"
        if resp == 'OK':
            #Iterate through folders
            for mbox in data:
                flags, separator, name = parse_list_response(bytes.decode(mbox))
                #If mailbox name returned is empty, go to next entry.
                if name == "":
                    continue
                # Select the mailbox for checking or deleting messages.
                print ("Checking folder: ",name)
                imap.select('"{0}"'.format(name), (check_or_del=="check"))
    
                #Search for messages older than the given date.
                before_date = (datetime.date.today() - datetime.timedelta(days_old)).strftime("%d-%b-%Y")  # date string, 
                resp, msgnums = imap.search(None, '(BEFORE {0})'.format(before_date))
                msg_count = len(msgnums[0].split())
    
                #Print the results
                print('{:<30} : {: d}'.format(name, msg_count))
    
                #Shall we check or delete?
                if (msg_count > 0):
                    if (check_or_del=="check"):
                        #Ask the user if they want mail deleted from the folder found.
                        print ("Delete mail older than {0} in {1} folder? (Enter y to delete)>>> ".format(before_date, name))
                        resp=input("")
    
                        if resp.lower()=='y':
                            #Add the folder name to a list.
                            deletion_list.append (name)
                            totalMsgs = totalMsgs + msg_count
    
                        actioned="Total found to Delete:"
                        continue
                    else:
                        actioned="Deleted: "
                        #Print a message telling the user about the time it might take!
                        if name in deletion_list or len(deletion_list) == 0:
                            totalMsgs = totalMsgs + msg_count                        
                            print (msg_count, "messages found with date before ", before_date, "will be moved to trash")
                            if (msg_count > 50000):
                                print ("This could take several hours!")
                            elif (msg_count > 5000):
                                print ("This could take an hour or more!")
                            elif (msg_count > 500):
                                print ("This could take a few minutes")
    
                            #Now mark the "found" messages as deleted using the IMAP library.    
                            imap.store("1:{0}".format(msg_count), '+FLAGS', '\\Deleted') 
                            continue
                else:
                    #No messages found to delete so continue to next folder.
                    continue
    
            print('{:<30} : {: d}'.format(actioned, totalMsgs))
            return (deletion_list)
    
    
    
    folder = ''
    deletion_list=[]
    
    
    #Sign on message.
    print ("*********--------****-----***************")
    print ("* Python Email Purger - V1.0 - Nove 2019 *")
    print ("*********--------****-----***************")
    print (" ")
    
    #Set some flags
    exit_prog=False
    input_needed=True
    
    #Start a loop in case the user wants to have repeated runs of deleting messages!
    while exit_prog==False:
    
    
        #Check if we already have some values from previous loop iteration
        if user != "":
            print ("Server:\t\t", host)
            print ("Username:\t",user)
            print ("Message Age:\t",days_old) 
            resp=input("Enter 'y' to use the values above>>> ")
            if resp != "y":
                user=""
    
        #Check if input values are already set and if they are not set,
        #read them in from the keyboard
        if user == "":
            while input_needed:
                #Get the host IMAP server domain etc.
                for i in range (0,len (imap_hosts)):
                    print (i+1,imap_hosts[i][0], " - ",imap_hosts[i][1])
                input_needed=True            
                host_input=input("Enter imap server name number, as given above, or type the address>>> ")
                max_host_index=str(len(imap_hosts))
                if len (host_input)==1 and (host_input >"0") and (host_input <= max_host_index):
                    host=imap_hosts[int(host_input)-1][1]
                    #Set deleted items folder name.
                    deleted_mail_folder_name=imap_hosts[int(host_input)-1][2]
                    input_needed=False
                else:
                    if len(host_input) < 10:
                        print ("Please enter a valid host address.")
                        input_needed=True
                    else:
                        host=host_input
            user=input ("Username:")
            print ("Password:")
            #This is an attempt to read in the password without echo, but it
            #does not work when running in Windows GUI/IDLE
            password=getpass()
    
            #Get the required age of messages.
            input_needed=True
            while input_needed:
                input_needed=False
                resp = input("Deleted messages older than how many days? Default is '365'>>> ")
                if len (resp) > 0:
                    days_old = int (resp)
    
                if days_old == 0:
                    print ("You must enter a value greater than 0.")
                    input_needed=True
    
        #Now connect to the server                              
        print ("Connecting to ",host,"...")
        imap = None
    
        try:
            # Create the IMAP Client
            imap = imaplib.IMAP4_SSL(host, port)
            # Login to the IMAP server
            resp, data = imap.login(user, password)
            #Check the server response.
            if resp == 'OK':
                print ("Logged in... Looking for messages older than", days_old, "days.")
                #Ask the user whether they want to delete messages in all folders, or
                #in selected folders.
                while not resp in ["c","a"]:
                    resp = input ("Enter 'c' to check each folder, or 'a' to delete from all folders >>>")
    
                #Now call the function to check for and delete messages.
                if resp=="c":
                    #Get folders and search for messages.
                    deletion_list = do_folders(imap,days_old,"check", deletion_list)
                    deletion_list = do_folders(imap,days_old,"delete", deletion_list)
                else:
                    #Delete messages in selected folders
                    deletion_list = do_folders(imap,days_old,"delete", deletion_list)
    
                if deleted_mail_folder_name!="":
                    print("Emptying Trash & Expunge...")
                    imap.select(deleted_mail_folder_name)  # select all trash
                    imap.store("1:*", '+FLAGS', '\\Deleted')  #Flag all Trash as Deleted
                    imap.expunge() 
        except:
            resp = input ("Something went wrong... enter 'd' to see details, otherwise just press 'Enter' to exit...")
            if resp=='d':
                print('Error was : {0}'.format(sys.exc_info()[0]))
                traceback.print_exc()
                print ("Are you any the wiser? :-)")
    
    #    finally:
    
            resp = input ("Enter 'Y' to delete more messages.")
            if resp.lower()!='y':
                exit_prog=True;
                if imap != None:
                    imap.logout()
                imap = None
                print ("Finished...")
    
    0 讨论(0)
  • 2020-12-14 08:43

    Delete all emails from inbox.

    ## ---------------------------------------------------------------------------
    #### Created by: James (Jamsey) P. Lopez
    #### Created date: 11/28/2020
    #### Modified date: 11/29/2020; 11/30/2020; 12/3/2020
    ## ---------------------------------------------------------------------------
    import win32com.client, time
    
    #### Setting email
    outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
    inbox = outlook.GetDefaultFolder(6)
    messages = inbox.Items
    messages.Sort("[ReceivedTime]", True)
    m = messages.GetFirst()
    
    #### Loop for emails     
    for m in list(messages):
        sender = m.SenderEmailAddress
        EmailDate = m.ReceivedTime
        if sender == "":
            m.Delete()
            time.sleep(.25)
        else:
            print sender
            print EmailDate
            m.Delete()
            time.sleep(.25)
    

    Delete all emails with date condition. This program will delete all emails older that 20 days from the current date. Adjust the days in variable Dy in program. example. DY = 20

    ## ---------------------------------------------------------------------------
    #### Created by: James (Jamsey) P. Lopez
    #### Created date: 11/28/2020
    #### Modified date: 11/29/2020; 11/30/2020; 12/3/2020
    ## ---------------------------------------------------------------------------
    import win32com.client, datetime, string, time
    from datetime import datetime, date, timedelta
    
    #### Setting email
    outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
    inbox = outlook.GetDefaultFolder(6)
    messages = inbox.Items
    messages.Sort("[ReceivedTime]", True)
    m = messages.GetFirst()
    
    ############ The delete condition below
    ############ Creating the date that will determine which emails will be deleted
    cur_date = datetime.today()
    
    #### Days to keep and any emails older than 20 days will be deleted
    #### Adjust the days to keep as needed
    Dy = 20
    datedays = cur_date-timedelta(days=Dy)
    EndDy = "{}".format(datedays.strftime("%m/%d/%Y 00:00:00"))
    EndDy = '"' + EndDy + '"'; ##print End30
    
    #### Loop for emails     
    for m in list(messages):
        sender = m.SenderEmailAddress
    
        EmailDate = m.ReceivedTime; ##print EmailDate
        EmailDate = datetime.strptime(str(EmailDate), '%m/%d/%y %H:%M:%S'); ##print EmailDate
        EmailDate = EmailDate.strftime('%m/%d/%Y %H:%M:%S'); ##print EmailDate
        EmailDate = '"' + EmailDate + '"'; ##print EmailDate;print End30
    
        if sender == "":
            print EmailDate
            m.Delete()
            time.sleep(.25)
        elif EmailDate < EndDy:
            print ("\nDeleted email = %(sender)s and date = %(EmailDate)s" % vars())
            print ("          because it is older than %(EndDy)s" % vars())
            print ("          which is %(Dy)s days older than today %(cur_date)s\n" % vars())
            m.Delete()
            time.sleep(.25)
    
    0 讨论(0)
提交回复
热议问题