Added some methods and mail config, compiles and mail count works fine
This commit is contained in:
parent
337ca05737
commit
99d111ed01
Binary file not shown.
Binary file not shown.
|
@ -2,9 +2,11 @@ import imaplib
|
||||||
import smtplib
|
import smtplib
|
||||||
from email.mime.text import MIMEText
|
from email.mime.text import MIMEText
|
||||||
from email.mime.multipart import MIMEMultipart
|
from email.mime.multipart import MIMEMultipart
|
||||||
|
from email import message_from_bytes
|
||||||
|
from email.header import decode_header
|
||||||
|
|
||||||
class EmailClient:
|
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.imap_server = imap_server
|
||||||
self.smtp_server = smtp_server
|
self.smtp_server = smtp_server
|
||||||
self.email = email
|
self.email = email
|
||||||
|
@ -13,19 +15,38 @@ class EmailClient:
|
||||||
self.smtp_port = smtp_port
|
self.smtp_port = smtp_port
|
||||||
self.imap_conn = None
|
self.imap_conn = None
|
||||||
self.smtp_conn = None
|
self.smtp_conn = None
|
||||||
self.connect_imap()
|
|
||||||
self.connect_smtp()
|
|
||||||
|
|
||||||
def connect_imap(self):
|
def connect_imap(self):
|
||||||
"""Conexión del servidor IMAP"""
|
"""Conexión del servidor IMAP"""
|
||||||
self.imap_conn = imaplib.IMAP4_SSL(self.imap_server, self.imap_port)
|
try:
|
||||||
self.imap_conn.login(self.email, self.password)
|
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):
|
def connect_smtp(self):
|
||||||
"""Conexión del servidor SMTP"""
|
"""Conexión del servidor SMTP"""
|
||||||
self.smtp_conn = smtplib.SMTP(self.smtp_server, self.smtp_port)
|
try:
|
||||||
self.smtp_conn.starttls()
|
self.smtp_conn = smtplib.SMTP(self.smtp_server, self.smtp_port)
|
||||||
self.smtp_conn.login(self.email, self.password)
|
#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):
|
def fetch_unread_count(self):
|
||||||
"""Obtener el número de correos no leidos"""
|
"""Obtener el número de correos no leidos"""
|
||||||
|
@ -33,6 +54,13 @@ class EmailClient:
|
||||||
status, response = self.imap_conn.search(None, "UNSEEN")
|
status, response = self.imap_conn.search(None, "UNSEEN")
|
||||||
return len(response[0].split())
|
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):
|
def list_emails(self, limit=10):
|
||||||
"""Lista de correos más recientes"""
|
"""Lista de correos más recientes"""
|
||||||
self.imap_conn.select("INBOX")
|
self.imap_conn.select("INBOX")
|
|
@ -1,7 +1,5 @@
|
||||||
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
|
||||||
|
@ -11,8 +9,9 @@ from src.services.threaden_task import ThreadenTask
|
||||||
|
|
||||||
class ThreadsManager:
|
class ThreadsManager:
|
||||||
"""Constructor"""
|
"""Constructor"""
|
||||||
def __init__(self, ui_instance):
|
def __init__(self, ui_instance, email_client):
|
||||||
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 = {
|
||||||
|
@ -41,8 +40,6 @@ 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)
|
||||||
|
@ -137,15 +134,33 @@ class ThreadsManager:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def update_emails(self):
|
def update_emails(self):
|
||||||
count = 0
|
"""Actualiza la cantidad de correos no leidos en tiempo real"""
|
||||||
while self.tasks["emails"].running:
|
while self.tasks["emails"].running:
|
||||||
count += random.randint(0, 2) # Simula la llegada de 0-2 correos
|
try:
|
||||||
self.ui_instance.after(
|
if not self.email_client.is_connected():
|
||||||
0,
|
self.email_client.reconnect()
|
||||||
lambda: self.ui_instance.info_labels["emails"].configure(text=f"Correos sin leer: {count}")
|
|
||||||
)
|
if self.email_client.is_connected():
|
||||||
time.sleep(20) # Actualiza cada 10 segundos
|
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)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -6,6 +6,7 @@ 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):
|
||||||
|
@ -14,8 +15,15 @@ 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.thread_manager = ThreadsManager(self, self.email_client)
|
||||||
self.process_manager = ProcessManager()
|
self.process_manager = ProcessManager()
|
||||||
self.system_monitor = None
|
self.system_monitor = None
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue