From d05aecc2fe41f49023feaf5386a1a4b2011d9426 Mon Sep 17 00:00:00 2001 From: Tilman Vogel Date: Wed, 28 Aug 2024 16:27:43 +0200 Subject: [PATCH] Add option to filter by age of messages (currently only implemented for the IMAP search not when processing a local upload directory) --- src/mailbox_cli.py | 5 +++++ src/mailbox_imap.py | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/mailbox_cli.py b/src/mailbox_cli.py index 5841abe..921cf31 100755 --- a/src/mailbox_cli.py +++ b/src/mailbox_cli.py @@ -53,6 +53,9 @@ def handle_arguments() -> argparse.ArgumentParser: parser.add_argument("-m", "--min-size", help="min attachment size in KB", default=2000, type=int) + parser.add_argument("-O", "--older", + help="only process messages older than this number of days", + type=int) parser.add_argument("-f", "--folder", help="imap folder to process", default="Inbox") parser.add_argument("-l", "--upload", @@ -106,6 +109,8 @@ def main(): logging.warning('Cache Enabled\t: %s', not args.reset_cache) logging.warning('Download\t: %s', not args.skip_download) logging.warning('Min Size\t: %s KB', args.min_size) + if args.older: + logging.warning('Older Than\t: %s days', args.older) logging.warning('Target\t\t: %s', args.target) logging.warning('Upload\t\t: %s', args.upload) logging.warning('All Folders\t: %s', args.all) diff --git a/src/mailbox_imap.py b/src/mailbox_imap.py index f52c794..d3525a4 100755 --- a/src/mailbox_imap.py +++ b/src/mailbox_imap.py @@ -21,6 +21,7 @@ import collections import os.path import pickle +from datetime import date, timedelta from src.mailbox_message import MailboxCleanerMessage @@ -343,7 +344,10 @@ def get_msgs_from_folder(self, folder): self.imap.select(folder, readonly=self.args.read_only) # Extract email UIDs - result_mails, data_mails = self.imap.uid('search', None, "ALL") + query = 'ALL' + if self.args.older: + query = f'BEFORE {date.today() - timedelta(days=self.args.older):%d-%b-%Y}' + result_mails, data_mails = self.imap.uid('search', None, query) msg_uids = data_mails[0].split() logging.warning('Mails (#)\t: %s (%s)', result_mails, len(msg_uids))