diff --git a/src/services/__pycache__/email_client.cpython-312.pyc b/src/services/__pycache__/email_client.cpython-312.pyc new file mode 100644 index 0000000..c4b6ea3 Binary files /dev/null and b/src/services/__pycache__/email_client.cpython-312.pyc differ diff --git a/src/services/__pycache__/threads_manager.cpython-312.pyc b/src/services/__pycache__/threads_manager.cpython-312.pyc index 1c163e7..9f5ff84 100644 Binary files a/src/services/__pycache__/threads_manager.cpython-312.pyc and b/src/services/__pycache__/threads_manager.cpython-312.pyc differ diff --git a/src/services/EmailClient.py b/src/services/email_client.py similarity index 58% rename from src/services/EmailClient.py rename to src/services/email_client.py index 5564c09..6d151ba 100644 --- a/src/services/EmailClient.py +++ b/src/services/email_client.py @@ -2,9 +2,11 @@ import imaplib import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart +from email import message_from_bytes +from email.header import decode_header class EmailClient: - def __init__(self, imap_server, smtp_server, email, password, imap_port=993, smtp_port=587): + def __init__(self, imap_server, smtp_server, email, password, imap_port=143, smtp_port=25): self.imap_server = imap_server self.smtp_server = smtp_server self.email = email @@ -13,19 +15,38 @@ class EmailClient: self.smtp_port = smtp_port self.imap_conn = None self.smtp_conn = None - self.connect_imap() - self.connect_smtp() + def connect_imap(self): """Conexión del servidor IMAP""" - self.imap_conn = imaplib.IMAP4_SSL(self.imap_server, self.imap_port) - self.imap_conn.login(self.email, self.password) + try: + self.imap_conn = imaplib.IMAP4(self.imap_server, self.imap_port) + self.imap_conn.login(self.email, self.password) + print("Conexión IMAP exitosa") + except Exception as e: + print(f"Erro al conectar al servidor IMAP: {e}") + self.imap_conn = None def connect_smtp(self): """Conexión del servidor SMTP""" - self.smtp_conn = smtplib.SMTP(self.smtp_server, self.smtp_port) - self.smtp_conn.starttls() - self.smtp_conn.login(self.email, self.password) + try: + self.smtp_conn = smtplib.SMTP(self.smtp_server, self.smtp_port) + #self.smtp_conn.starttls() + self.smtp_conn.login(self.email, self.password) + print("Conexión SMTP exitosa") + except Exception as e: + print(f"Error al conectar al servidor SMTP: {e}") + self.smtp_conn = None + + def is_connected(self): + """Verifica si hay una conexión valida tanto de IMAP como de SMTP""" + return self.imap_conn is not None and self.smtp_conn is not None + + def reconnect(self): + """Intenta reconectar a los servidores IMAP y SMTP""" + print("Intentando reconectar al servidor de correo...") + self.connect_imap() + self.connect_smtp() def fetch_unread_count(self): """Obtener el número de correos no leidos""" @@ -33,6 +54,13 @@ class EmailClient: status, response = self.imap_conn.search(None, "UNSEEN") return len(response[0].split()) + def fetch_folders(self): + """Obtiene la lista de carpetas disponibles en el servidor""" + status, folders = self.imap_conn.list() + if status == "OK": + return [folder.decode().split(' "/" ')[-1] for folder in folders] + return [] + def list_emails(self, limit=10): """Lista de correos más recientes""" self.imap_conn.select("INBOX") diff --git a/src/services/threads_manager.py b/src/services/threads_manager.py index 9616cb8..35856d7 100644 --- a/src/services/threads_manager.py +++ b/src/services/threads_manager.py @@ -1,7 +1,5 @@ import datetime -import random import time - import requests from src.services.Radio_Player import RadioPlayer @@ -11,8 +9,9 @@ from src.services.threaden_task import ThreadenTask class ThreadsManager: """Constructor""" - def __init__(self, ui_instance): + def __init__(self, ui_instance, email_client): self.ui_instance = ui_instance + self.email_client = email_client self.system_monitor = None self.radio_player = RadioPlayer() self.tasks = { @@ -41,8 +40,6 @@ class ThreadsManager: for metric in system_monitor.metrics.keys(): self.system_monitor_tasks[metric] = ThreadenTask() - - def start_threads(self): """Se inician los hilos, Tiempo, Temperatura, Emails""" self.tasks["time"].start(self.update_time) @@ -137,15 +134,33 @@ class ThreadsManager: return None - def update_emails(self): - count = 0 + """Actualiza la cantidad de correos no leidos en tiempo real""" while self.tasks["emails"].running: - count += random.randint(0, 2) # Simula la llegada de 0-2 correos - self.ui_instance.after( - 0, - lambda: self.ui_instance.info_labels["emails"].configure(text=f"Correos sin leer: {count}") - ) - time.sleep(20) # Actualiza cada 10 segundos + try: + if not self.email_client.is_connected(): + self.email_client.reconnect() + + if self.email_client.is_connected(): + unread_count = self.email_client.fetch_unread_count() + self.ui_instance.after( + 0, + lambda: self.ui_instance.info_labels["emails"].configure( + text=f"Correos sin leer: {unread_count}" + ) + ) + else: + print("No hay conexión al servidor de correo") + self.ui_instance.after( + 0, + lambda: self.ui_instance.info_labels["emails"].configure( + text="Servidor no disponible" + ) + ) + except Exception as e: + print(f"Error en el hilo de correos: {e}") + time.sleep(60) + + diff --git a/src/ui/__pycache__/centered_window.cpython-312.pyc b/src/ui/__pycache__/centered_window.cpython-312.pyc index 671907a..753da6f 100644 Binary files a/src/ui/__pycache__/centered_window.cpython-312.pyc and b/src/ui/__pycache__/centered_window.cpython-312.pyc differ diff --git a/src/ui/centered_window.py b/src/ui/centered_window.py index 485bfb4..e62e07a 100644 --- a/src/ui/centered_window.py +++ b/src/ui/centered_window.py @@ -6,6 +6,7 @@ from src.services.processes_manager import ProcessManager from src.services.system_monitor import SystemMonitor from src.services.tetris_game import TetrisGame from src.services.threads_manager import ThreadsManager +from src.services.email_client import EmailClient class CenteredWindow(ctk.CTk): @@ -14,8 +15,15 @@ class CenteredWindow(ctk.CTk): super().__init__() self.title(title) + #Configurar Email Client + self.email_client = EmailClient( + imap_server="192.168.120.103", + smtp_server="192.168.120.103", + email="dennis@psp.ieslamar.org", + password="1234" + ) # Inicializar managers (orden es importante) - self.thread_manager = ThreadsManager(self) + self.thread_manager = ThreadsManager(self, self.email_client) self.process_manager = ProcessManager() self.system_monitor = None