Proyecto1AVApsp/ARQUITECTURA_CORREO.md

7.9 KiB

Arquitectura del Cliente de Correo - Proyecto1AVApsp

Estructura de la aplicación

┌──────────────────────────────────────────────────────────────┐
│                    Proyecto1AVApsp                           │
│                    Panel de Laboratorio                       │
└──────────────────────────────────────────────────────────────┘
                              │
        ┌─────────────────────┼─────────────────────┐
        │                     │                     │
   ┌────▼────┐           ┌────▼────┐          ┌────▼────┐
   │  Tareas │           │ Correos │          │  Juegos │
   └─────────┘           └────┬────┘          └─────────┘
                              │
            ┌─────────────────┴─────────────────┐
            │                                   │
       ┌────▼────────┐                  ┌───────▼───────┐
       │  IMAP       │                  │     SMTP      │
       │  Cliente    │                  │   Cliente     │
       └─────┬───────┘                  └───────┬───────┘
             │                                  │
             │         ┌──────────────┐         │
             └─────────► Servidor     ◄─────────┘
                       │  Webmin      │
                       │ 10.10.0.101  │
                       └──────────────┘

Componentes principales

1. Interfaz de Usuario (app.py:631-753)

  • Panel de configuración del servidor
  • Lista de correos (bandeja de entrada)
  • Visor de correos
  • Ventana de composición de correos

2. Gestión IMAP (app.py:1380-1540)

Funciones:

  • _connect_mail_server(): Conecta al servidor IMAP
  • _disconnect_mail_server(): Desconecta del servidor
  • _refresh_mail_list(): Carga la lista de correos
  • _on_mail_select(): Maneja la selección de correos
  • _display_mail(): Muestra el contenido de un correo

Protocolo: IMAP (Puerto 143)

3. Gestión SMTP (app.py:1585-1620)

Funciones:

  • _open_compose_window(): Abre ventana de redacción
  • _send_mail(): Envía correos usando SMTP

Protocolo: SMTP (Puerto 25)

Flujo de datos

Lectura de correos (IMAP)

Usuario → Clic "Conectar"
    ↓
_connect_mail_server()
    ↓
imaplib.IMAP4(host, 143)
    ↓
imap.login(usuario, contraseña)
    ↓
imap.select('INBOX')
    ↓
_refresh_mail_list()
    ↓
imap.search(None, 'ALL')
    ↓
imap.fetch(mail_id, 'RFC822')
    ↓
email.message_from_bytes()
    ↓
Mostrar en Listbox
    ↓
Usuario selecciona correo
    ↓
_display_mail()
    ↓
Parsear contenido (texto/HTML)
    ↓
Mostrar en ScrolledText

Envío de correos (SMTP)

Usuario → Clic "Nuevo correo"
    ↓
_open_compose_window()
    ↓
Usuario completa campos (Para, Asunto, Mensaje)
    ↓
Usuario → Clic "Enviar"
    ↓
_send_mail()
    ↓
MIMEMultipart()
    ↓
MIMEText(body, 'plain')
    ↓
smtplib.SMTP(host, 25)
    ↓
server.send_message(msg)
    ↓
Confirmación al usuario

Protocolos de comunicación

IMAP (Internet Message Access Protocol)

  • Puerto: 143 (sin cifrar) / 993 (cifrado)
  • Uso: Leer correos del servidor
  • Ventajas:
    • Los correos permanecen en el servidor
    • Acceso desde múltiples dispositivos
    • Sincronización de carpetas

SMTP (Simple Mail Transfer Protocol)

  • Puerto: 25 (sin cifrar) / 587 (TLS) / 465 (SSL)
  • Uso: Enviar correos
  • Autenticación: Opcional según configuración del servidor

Configuración del servidor Webmin

Servicios necesarios:

┌─────────────────────────────────────────┐
│  Webmin (http://10.10.0.101:20000)      │
├─────────────────────────────────────────┤
│  Servicios de correo:                   │
│  • Postfix (SMTP) → Puerto 25           │
│  • Dovecot (IMAP) → Puerto 143          │
│  • Dovecot (POP3) → Puerto 110          │
└─────────────────────────────────────────┘

Pasos en Webmin:

  1. Servers → Dovecot IMAP/POP3 Server

    • Habilitar servicio IMAP en puerto 143
    • Configurar usuarios y contraseñas
  2. Servers → Postfix Mail Server

    • Habilitar servicio SMTP en puerto 25
    • Configurar dominio y relay
  3. System → Users and Groups

    • Crear usuarios del sistema para correo
    • Asignar contraseñas

Seguridad

Advertencias actuales:

⚠️ La implementación actual usa conexiones sin cifrar

Recomendaciones:

  1. Usar IMAPS (puerto 993) en lugar de IMAP (143)
  2. Usar SMTPS (puerto 465/587) en lugar de SMTP (25)
  3. Implementar SSL/TLS en las conexiones
  4. No usar contraseñas en texto plano en el código
  5. Usar autenticación del servidor SMTP

Mejora de seguridad (código):

# IMAP con SSL
import imaplib
imap = imaplib.IMAP4_SSL('10.10.0.101', 993)

# SMTP con TLS
import smtplib
smtp = smtplib.SMTP('10.10.0.101', 587)
smtp.starttls()
smtp.login(username, password)

Estructura de archivos

Proyecto1AVApsp/
├── app.py                  # Aplicación principal con cliente de correo
├── CORREO_README.md        # Documentación de usuario
├── test_mail_server.py     # Script de prueba de conectividad
├── requirements.txt        # Dependencias (smtplib/imaplib incluidos en Python)
└── README.md              # Documentación general del proyecto

Variables de estado

# Variables del cliente de correo (en DashboardApp)
self.mail_connected = False           # Estado de conexión
self.imap_connection = None           # Objeto de conexión IMAP
self.current_mailbox = 'INBOX'        # Bandeja actual
self.mail_list = []                   # Lista de correos cargados

# Widgets de UI
self.mail_imap_host                   # Entry: servidor IMAP
self.mail_imap_port                   # Entry: puerto IMAP
self.mail_smtp_host                   # Entry: servidor SMTP
self.mail_smtp_port                   # Entry: puerto SMTP
self.mail_username                    # Entry: usuario
self.mail_password                    # Entry: contraseña
self.mail_listbox                     # Listbox: lista de correos
self.mail_body_text                   # ScrolledText: cuerpo del correo

Testing

Script de prueba de conectividad:

python3 test_mail_server.py

Este script verifica:

  • Conexión a Webmin (puerto 20000)
  • Disponibilidad de SMTP (puerto 25)
  • Disponibilidad de IMAP (puerto 143)
  • Disponibilidad de POP3 (puerto 110)

Próximas mejoras

  1. Seguridad

    • Implementar SSL/TLS
    • Autenticación segura
    • Gestión de certificados
  2. Funcionalidad

    • Soporte para adjuntos
    • Vista HTML mejorada
    • Múltiples carpetas
    • Búsqueda de correos
    • Responder/Reenviar
  3. UI/UX

    • Indicador de correos no leídos
    • Filtros y ordenamiento
    • Marcadores/etiquetas
    • Vista previa de adjuntos
  4. Performance

    • Carga asíncrona de correos
    • Cache de correos
    • Paginación