================================================================================ GMAIL CLEANUP - CHALLENGE 2 SOLUTION Chapter 5: Complete Cleanup Workflow Challenge: Multi-Criteria Cleanup ================================================================================ PROBLEM: Build cleanup that finds and deletes: 1. Emails older than 365 days 2. Emails with large attachments 3. Emails from specific senders SOLUTION: ================================================================================ File: cleanup_multi.py from gmail_utils import get_gmail_service, GmailCleanup from config import Config def main(): print("🚀 MULTI-CRITERIA CLEANUP") config = Config() if not config.validate(): return False service = get_gmail_service() cleanup = GmailCleanup(service, config) # Criterion 1: Old emails print("\n1️⃣ Deleting old emails...") old_emails = cleanup.find_old_emails(days=config.days_old) for email in old_emails: cleanup.delete_email(email['id']) print(f"✅ Deleted {len(old_emails)} old emails") # Criterion 2: Large attachments print("\n2️⃣ Deleting large attachments...") large_emails = cleanup.find_large_attachments(config.min_attachment_mb) for email in large_emails: cleanup.delete_email(email['id']) print(f"✅ Deleted {len(large_emails)} emails with large attachments") # Criterion 3: From specific senders (spam list) print("\n3️⃣ Deleting from known senders...") spam_senders = [ "newsletter@promotions.com", "marketing@ads.com", "no-reply@bulk.com" ] spam_count = 0 for sender in spam_senders: spam_emails = cleanup.find_from_sender(sender) for email in spam_emails: cleanup.delete_email(email['id']) spam_count += len(spam_emails) print(f" - Deleted {len(spam_emails)} from {sender}") print(f"✅ Deleted {spam_count} spam emails total") # Report print("\n" + "=" * 60) cleanup.print_report() return True if __name__ == "__main__": main() ================================================================================