Compare commits

..

No commits in common. "99d111ed0167e65cc60487c4016d49eb2da45a31" and "1f9ec59e64c03f9f618f823ae3422c206a70b6ab" have entirely different histories.

7 changed files with 44 additions and 126 deletions

View File

@ -0,0 +1,30 @@
import imaplib
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
class EmailClient:
def __init__(self, imap_server, smtp_server, email, password, imap_port=993, smtp_port=587):
self.imap_server = imap_server
self.smtp_server = smtp_server
self.email = email
self.password = password
self.imap_port = imap_port
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)
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)

View File

@ -1,89 +0,0 @@
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=143, smtp_port=25):
self.imap_server = imap_server
self.smtp_server = smtp_server
self.email = email
self.password = password
self.imap_port = imap_port
self.smtp_port = smtp_port
self.imap_conn = None
self.smtp_conn = None
def connect_imap(self):
"""Conexión del servidor IMAP"""
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"""
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"""
self.imap_conn.select("INBOX")
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")
status, response = self.imap_conn.search(None, "ALL")
email_ids = response[0].split()[-limit:]
emails = []
for email_id in email_ids:
status, msg_data = self.imap_conn.fetch(email_id, "(RFC822)")
emails.append(msg_data[0][1].decode("utf-8"))
return emails
def send_mail(self, to_address, subject, body):
"""Permite enviar un correo electronico"""
msg = MIMEMultipart()
msg["From"] = self.email
msg["To"] = to_address
msg["Subject"] = subject
msg.attach(MIMEText(body, "plain"))
self.smtp_conn.sendmail(self.email, to_address, msg.as_string())
def close_connections(self):
"""Cierra las conexiones IMAP y SMTP"""
if self.imap_conn:
self.imap_conn.logout()
if self.smtp_conn:
self.smtp_conn.quit()

View File

@ -1,5 +1,7 @@
import datetime import datetime
import random
import time import time
import requests import requests
from src.services.Radio_Player import RadioPlayer from src.services.Radio_Player import RadioPlayer
@ -9,9 +11,8 @@ from src.services.threaden_task import ThreadenTask
class ThreadsManager: class ThreadsManager:
"""Constructor""" """Constructor"""
def __init__(self, ui_instance, email_client): def __init__(self, ui_instance):
self.ui_instance = ui_instance self.ui_instance = ui_instance
self.email_client = email_client
self.system_monitor = None self.system_monitor = None
self.radio_player = RadioPlayer() self.radio_player = RadioPlayer()
self.tasks = { self.tasks = {
@ -40,6 +41,8 @@ class ThreadsManager:
for metric in system_monitor.metrics.keys(): for metric in system_monitor.metrics.keys():
self.system_monitor_tasks[metric] = ThreadenTask() self.system_monitor_tasks[metric] = ThreadenTask()
def start_threads(self): def start_threads(self):
"""Se inician los hilos, Tiempo, Temperatura, Emails""" """Se inician los hilos, Tiempo, Temperatura, Emails"""
self.tasks["time"].start(self.update_time) self.tasks["time"].start(self.update_time)
@ -134,33 +137,15 @@ class ThreadsManager:
return None return None
def update_emails(self): def update_emails(self):
"""Actualiza la cantidad de correos no leidos en tiempo real""" count = 0
while self.tasks["emails"].running: while self.tasks["emails"].running:
try: count += random.randint(0, 2) # Simula la llegada de 0-2 correos
if not self.email_client.is_connected(): self.ui_instance.after(
self.email_client.reconnect() 0,
lambda: self.ui_instance.info_labels["emails"].configure(text=f"Correos sin leer: {count}")
if self.email_client.is_connected(): )
unread_count = self.email_client.fetch_unread_count() time.sleep(20) # Actualiza cada 10 segundos
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)

View File

@ -6,7 +6,6 @@ from src.services.processes_manager import ProcessManager
from src.services.system_monitor import SystemMonitor from src.services.system_monitor import SystemMonitor
from src.services.tetris_game import TetrisGame from src.services.tetris_game import TetrisGame
from src.services.threads_manager import ThreadsManager from src.services.threads_manager import ThreadsManager
from src.services.email_client import EmailClient
class CenteredWindow(ctk.CTk): class CenteredWindow(ctk.CTk):
@ -15,15 +14,8 @@ class CenteredWindow(ctk.CTk):
super().__init__() super().__init__()
self.title(title) 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) # Inicializar managers (orden es importante)
self.thread_manager = ThreadsManager(self, self.email_client) self.thread_manager = ThreadsManager(self)
self.process_manager = ProcessManager() self.process_manager = ProcessManager()
self.system_monitor = None self.system_monitor = None