247 lines
7.9 KiB
Markdown
247 lines
7.9 KiB
Markdown
# 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):
|
|
```python
|
|
# 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
|
|
|
|
```python
|
|
# 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:
|
|
```bash
|
|
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
|