#!/usr/bin/env python3
"""
Demo script: Come visualizzare le ultime email
Questo script dimostra come utilizzare il client email Aruba per
visualizzare le ultime email ricevute.
NOTA: Per eseguire questo script con dati reali, devi configurare
il file .env con le tue credenziali Aruba.
"""
import os
import sys
from dotenv import load_dotenv
from src.mcp_aruba.email_client import ArubaEmailClient
# Placeholder values that indicate credentials aren't configured
PLACEHOLDER_VALUES = ['your_password_here', 'your_email@aruba.it', 'tua_password', 'example.com']
def print_email(email, index):
"""Stampa un'email in formato leggibile."""
print(f"\n{'='*80}")
print(f"📧 Email #{index}")
print(f"{'='*80}")
print(f"ID: {email.get('id', 'N/A')}")
print(f"Da: {email.get('from', 'N/A')}")
print(f"A: {email.get('to', 'N/A')}")
print(f"Oggetto: {email.get('subject', 'N/A')}")
print(f"Data: {email.get('date', 'N/A')}")
print(f"\nAnteprima:")
print(f"{'-'*80}")
body_preview = email.get('body', '')[:200]
print(f"{body_preview}{'...' if len(email.get('body', '')) > 200 else ''}")
print(f"{'-'*80}")
def demo_list_latest_emails(limit=5):
"""
Dimostra come ottenere le ultime email.
Args:
limit: Numero di email da visualizzare (default: 5)
"""
print("\n🚀 Demo: Visualizzare le Ultime Email\n")
print(f"Tento di recuperare le ultime {limit} email...\n")
# Carica configurazione
load_dotenv()
# Verifica credenziali
username = os.getenv('IMAP_USERNAME')
password = os.getenv('IMAP_PASSWORD')
# Check if credentials are valid (not None and not placeholder values)
is_placeholder = any(placeholder in str(password).lower() or placeholder in str(username).lower()
for placeholder in PLACEHOLDER_VALUES)
if not username or not password or is_placeholder:
print("⚠️ CREDENZIALI NON CONFIGURATE")
print("\nQuesto è uno script dimostrativo.")
print("Per vedere le tue email reali, devi:")
print(" 1. Copiare .env.example in .env")
print(" 2. Modificare .env con le tue credenziali Aruba")
print(" 3. Rieseguire questo script")
print("\n" + "="*80)
print("📝 ESEMPIO DI OUTPUT ATTESO:")
print("="*80)
# Mostra un esempio di come apparirebbe l'output
example_emails = [
{
'id': '12345',
'from': 'mario.rossi@example.com',
'to': 'tuo_email@aruba.it',
'subject': 'Riunione di domani',
'date': 'Thu, 5 Dec 2024 14:30:00 +0100',
'body': 'Ciao,\n\nVolevo confermare la riunione di domani alle 10:00 in sala riunioni A. Porterò i documenti del progetto.\n\nA domani!\nMario'
},
{
'id': '12344',
'from': 'newsletter@example.com',
'to': 'tuo_email@aruba.it',
'subject': 'Newsletter Settimanale - Dicembre 2024',
'date': 'Thu, 5 Dec 2024 09:00:00 +0100',
'body': 'Benvenuto alla newsletter di questa settimana!\n\nIn questo numero:\n- Novità del settore\n- Eventi in programma\n- Offerte speciali\n\nBuona lettura!'
},
{
'id': '12343',
'from': 'support@service.com',
'to': 'tuo_email@aruba.it',
'subject': 'Il tuo ticket #5678 è stato risolto',
'date': 'Wed, 4 Dec 2024 16:45:00 +0100',
'body': 'Buongiorno,\n\nIl ticket #5678 che hai aperto è stato risolto con successo. Il problema è stato identificato e corretto.\n\nSe hai altre domande, non esitare a contattarci.\n\nCordiali saluti,\nIl Team Support'
}
]
for i, email in enumerate(example_emails[:limit], 1):
print_email(email, i)
print(f"\n{'='*80}")
print("✨ FINE ESEMPIO")
print("="*80)
print(f"\nCon credenziali reali, vedrai le tue {limit} email più recenti dalla casella Aruba.")
return
# Esegui con credenziali reali
try:
print(f"📡 Connessione a {os.getenv('IMAP_HOST')}...")
print(f"👤 Utente: {username}\n")
with ArubaEmailClient(
host=os.getenv('IMAP_HOST', 'imaps.aruba.it'),
port=int(os.getenv('IMAP_PORT', '993')),
username=username,
password=password
) as client:
print("✅ Connesso!\n")
print(f"📥 Recupero ultime {limit} email...\n")
# Ottieni le email
emails = client.list_emails(limit=limit)
if not emails:
print("📭 Nessuna email trovata nella casella INBOX.")
return
print(f"✅ Trovate {len(emails)} email!\n")
# Stampa le email
for i, email in enumerate(emails, 1):
print_email(email, i)
print(f"\n{'='*80}")
print(f"✅ Recuperate con successo {len(emails)} email")
print("="*80)
except ValueError as e:
print(f"\n❌ Errore di configurazione: {e}")
print("\nVerifica che il file .env sia configurato correttamente.")
sys.exit(1)
except Exception as e:
print(f"\n❌ Errore: {e}")
print("\nVerifica:")
print(" - Credenziali corrette in .env")
print(" - Connessione internet attiva")
print(" - Firewall non blocca la porta 993")
sys.exit(1)
def demo_filter_by_sender(sender_email, limit=5):
"""
Dimostra come filtrare le email per mittente.
Args:
sender_email: Email del mittente da filtrare
limit: Numero massimo di email da visualizzare
"""
print(f"\n🔍 Demo: Filtrare Email per Mittente\n")
print(f"Cerco email da: {sender_email}\n")
load_dotenv()
# Verifica credenziali
username = os.getenv('IMAP_USERNAME')
password = os.getenv('IMAP_PASSWORD')
# Check if credentials are valid (not None and not placeholder values)
is_placeholder = any(placeholder in str(password).lower() or placeholder in str(username).lower()
for placeholder in PLACEHOLDER_VALUES)
if not username or not password or is_placeholder:
print("⚠️ CREDENZIALI NON CONFIGURATE")
print("\nPer usare questa funzionalità, devi configurare il file .env con le tue credenziali Aruba.")
return
try:
with ArubaEmailClient(
host=os.getenv('IMAP_HOST', 'imaps.aruba.it'),
port=int(os.getenv('IMAP_PORT', '993')),
username=username,
password=password
) as client:
emails = client.list_emails(
sender_filter=sender_email,
limit=limit
)
if not emails:
print(f"📭 Nessuna email trovata da {sender_email}")
return
print(f"✅ Trovate {len(emails)} email da {sender_email}!\n")
for i, email in enumerate(emails, 1):
print_email(email, i)
except Exception as e:
print(f"❌ Errore: {e}")
def main():
"""Main demo function."""
print("\n" + "="*80)
print(" "*20 + "📧 DEMO: VISUALIZZARE LE ULTIME EMAIL")
print("="*80)
if len(sys.argv) > 1:
command = sys.argv[1].lower()
if command == 'help' or command == '--help' or command == '-h':
print("\nUtilizzo:")
print(" python demo_list_emails.py [limit]")
print(" python demo_list_emails.py filter <email> [limit]")
print("\nEsempi:")
print(" python demo_list_emails.py # Mostra ultime 5 email")
print(" python demo_list_emails.py 10 # Mostra ultime 10 email")
print(" python demo_list_emails.py filter mario@example.com 5")
return
elif command == 'filter':
if len(sys.argv) < 3:
print("❌ Specifica l'email del mittente")
print(" Esempio: python demo_list_emails.py filter mario@example.com")
return
sender = sys.argv[2]
limit = int(sys.argv[3]) if len(sys.argv) > 3 else 5
demo_filter_by_sender(sender, limit)
return
else:
try:
limit = int(sys.argv[1])
demo_list_latest_emails(limit)
except ValueError:
print(f"❌ Parametro non valido: {sys.argv[1]}")
print(" Usa un numero o 'help' per vedere le opzioni")
return
else:
demo_list_latest_emails(limit=5)
print("\n" + "="*80)
print("💡 SUGGERIMENTI:")
print("="*80)
print("• Usa la CLI per accesso rapido: python cli.py emails 10")
print("• Configura Claude Desktop per interagire con linguaggio naturale")
print("• Vedi GUIDA_UTILIZZO_EMAIL.md per esempi avanzati")
print("="*80 + "\n")
if __name__ == "__main__":
main()