""" test_outlook.py — Script interattivo di verifica Layer 1 Lancia dalla root di Frank: python modules\outlook\test_outlook.py Requisiti: - Outlook aperto e loggato - pywin32 installato (già in requirements.txt) """ import sys import os # Aggiunge la root di Frank al path per trovare i moduli sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))) from modules.outlook.outlook_connector import OutlookConnector SEP = "─" * 60 def main(): print(SEP) print(" Frank — Outlook Connector — Layer 1 Test") print(SEP) connector = OutlookConnector() # --- Step 1: Connessione --- print("\n[1/5] Connessione a Outlook...") if not connector.connect(): print("✗ Connessione fallita. Assicurati che Outlook sia aperto e loggato.") sys.exit(1) account_name = connector.namespace.CurrentUser.Name account_email = connector.namespace.CurrentUser.Address print(f"✓ Connesso — account: {account_name} <{account_email}>") # --- Step 2: Lista cartelle --- print(f"\n[2/5] Cartelle dell'Inbox (prime 10):") print(SEP) folders = connector.list_folders()[:10] if folders: for f in folders: print(f" 📁 {f['name']:<30} ({f['count']} messaggi) {f['path']}") else: print(" (nessuna sottocartella trovata)") # --- Step 3: Ultime 10 email --- print(f"\n[3/5] Ultime 10 email in Inbox:") print(SEP) emails = connector.get_emails(folder_name='Inbox', n=10, unread_only=False) if not emails: print(" (nessuna email trovata)") else: for i, mail in enumerate(emails): unread_marker = "* " if mail['unread'] else " " print(f" {unread_marker}[{mail['received']}] {mail['sender']:<25} — \"{mail['subject']}\"") # --- Step 4: Trova prima email non letta --- print(f"\n[4/5] Prima email non letta:") print(SEP) unread_emails = [m for m in emails if m['unread']] if not unread_emails: # Prova a cercare altre non lette unread_emails = connector.get_emails(folder_name='Inbox', n=5, unread_only=True) if not unread_emails: print(" (nessuna email non letta trovata — test spostamento saltato)") print(f"\n[5/5] Test spostamento: SALTATO (nessuna email non letta)") else: target = unread_emails[0] print(f" Trovata: [{target['received']}] {target['sender']} — \"{target['subject']}\"") # --- Step 5: Chiedi conferma e sposta --- print(f"\n[5/5] Spostamento in [Frank_Cestino]:") print(SEP) print(f" Email: \"{target['subject']}\"") print(f" Da: {target['sender']} <{target['sender_email']}>") print(f" ⚠️ L'operazione è reversibile — l'email finirà in [Frank_Cestino]") print() try: risposta = input(" Sposto questa email in [Frank_Cestino]? [s/N]: ").strip().lower() except (KeyboardInterrupt, EOFError): risposta = 'n' if risposta == 's': success = connector.move_email(target['entry_id'], '[Frank_Cestino]') if success: print(f" ✓ Email spostata in [Frank_Cestino]") else: print(f" ✗ Spostamento fallito — controlla i log") else: print(" Operazione annullata.") # --- Riepilogo --- print() print(SEP) print(" Test completato.") print(" Nota: se durante il test è comparso un dialog di sicurezza Outlook") print(" ('Un programma esterno vuole accedere ai tuoi messaggi'),") print(" annotarlo nelle Note del BRIEFING.md.") print(SEP) if __name__ == '__main__': main()