diff --git a/README.md b/README.md index a1384c5..bf75694 100644 --- a/README.md +++ b/README.md @@ -1,163 +1,88 @@ -# Cliente de Correo Electrónico +# Cliente de Correo Electrónico (Python + Tkinter) -Cliente de correo electrónico con interfaz gráfica desarrollado en Python con soporte para SMTP, IMAP y POP3. +Este proyecto implementa un cliente de correo electrónico completo con interfaz gráfica (GUI) desarrollado en **Python** utilizando **Tkinter**. La aplicación soporta los tres protocolos fundamentales de correo electrónico: **SMTP** (envío), **IMAP** (gestión remota) y **POP3** (descarga local). -## Características +![Python](https://img.shields.io/badge/Python-3.11%2B-blue) +![Tkinter](https://img.shields.io/badge/GUI-Tkinter-green) -- **Envío de correos** mediante SMTP (puerto 25) - - **Enviar archivos adjuntos** de cualquier tipo - - Múltiples archivos adjuntos por correo -- **Consulta de correos** mediante IMAP (puerto 143) -- **Descarga de correos** mediante POP3 (puerto 110) -- **Inicio de sesión automático** con credenciales predefinidas (levi@psp.es) -- **Soporte completo para archivos adjuntos**: - - Visualizar lista de adjuntos en correos recibidos - - **Previsualizar adjuntos** (imágenes y archivos de texto) - - Guardar adjuntos individuales o todos a la vez -- Interfaz gráfica intuitiva con Tkinter -- Soporte para múltiples codificaciones de caracteres -- Decodificación automática de encabezados +## 🚀 Características Principales -## Requisitos +* **Interfaz Gráfica Intuitiva**: Diseño basado en pestañas para separar funcionalidades (Login, Enviar, Bandeja, Descargas). +* **Soporte Multi-Protocolo**: + * **SMTP (Puerto 25)**: Envío de correos electrónicos con soporte para múltiples destinatarios. + * **IMAP (Puerto 143)**: Visualización y gestión de la bandeja de entrada en tiempo real. + * **POP3 (Puerto 110)**: Descarga de mensajes desde el servidor al cliente local. +* **Gestión de Adjuntos**: + * Envío de archivos adjuntos de cualquier tipo. + * Visualización y descarga de adjuntos recibidos. + * **Previsualización integrada** para imágenes y archivos de texto sin necesidad de guardarlos. + * Menú contextual (clic derecho) para guardar adjuntos individuales o en lote. +* **Lectura de Correos**: Decodificación automática de cabeceras y cuerpos de mensaje (HTML/Texto plano). -- Python 3.12 o superior (recomendado) -- Bibliotecas de Python: - - tkinter (incluido con Python) - - Pillow (para previsualización de imágenes) - - smtplib, imaplib, poplib, email (incluidos) +## 📋 Requisitos Previos -## Configuración del Servidor - -El cliente está configurado por defecto para conectarse a: - -- **IP del servidor**: 10.10.0.101 -- **Puerto SMTP**: 25 -- **Puerto IMAP**: 143 -- **Puerto POP3**: 110 -- **Web**: https://10.10.0.101:20000 - -## Instalación - -1. Clona o descarga este repositorio -2. No se requieren dependencias adicionales - -## Uso - -### Ejecución +* **Python 3.11 o superior** (Recomendado 3.12). +* Librerías estándar de Python (incluidas por defecto): + * `tkinter` (Interfaz gráfica) + * `smtplib`, `imaplib`, `poplib` (Protocolos de red) + * `email` (Manejo de formato MIME) +* Librería externa para imágenes: + * `Pillow` (PIL) +### Instalación de dependencias ```bash -python cliente_correo.py +pip install pillow ``` -O en sistemas Unix/Linux: +## 🔧 Instalación y Ejecución +### 1. Clonar o descargar el proyecto +Asegúrate de tener todos los archivos en una misma carpeta: +* `cliente_correo.py` +* `ejecutar.sh` +* `INSTALACION.md` + +### 2. Configuración del Servidor +Por defecto, el cliente está configurado para un servidor local. Puedes modificar la IP en el archivo `cliente_correo.py` o ingresarla en la interfaz de login. + +* IP por defecto: `10.10.0.101` +* Credenciales predefinidas: `levi@psp.es` / `1234` + +### 3. Ejecutar la aplicación + +**En macOS / Linux (Recomendado):** +Utiliza el script incluido que busca automáticamente la versión correcta de Python: +```bash +chmod +x ejecutar.sh +./ejecutar.sh +``` + +**Método estándar (Cualquier SO):** ```bash python3 cliente_correo.py ``` -### Inicio de Sesión +> **Nota para usuarios de macOS**: Si encuentras problemas con la versión de Tkinter, consulta el archivo [INSTALACION.md](INSTALACION.md) para una guía detallada de solución. -El cliente inicia sesión automáticamente con las credenciales predefinidas: -- **Usuario**: levi@psp.es -- **Contraseña**: 1234 - -Si necesitas usar otras credenciales, puedes modificarlas en la pestaña "Iniciar Sesión" y hacer clic en "Conectar". - -### Enviar Correos (SMTP) - -1. Ve a la pestaña "Enviar Correo" -2. Completa los campos: - - **Para**: Dirección de correo del destinatario - - **Asunto**: Asunto del correo -3. **(Opcional) Adjuntar archivos**: - - Haz clic en "Agregar Archivo" en la sección "Adjuntar Archivos" - - Selecciona uno o varios archivos - - Los archivos aparecerán en la lista - - Puedes quitar archivos seleccionándolos y haciendo clic en "Quitar Seleccionado" -4. Escribe tu mensaje en el campo "Mensaje" -5. Haz clic en "Enviar Correo" - -### Consultar Correos (IMAP) - -1. Ve a la pestaña "Bandeja de Entrada (IMAP)" -2. Haz clic en "Actualizar" para cargar los correos -3. Selecciona un correo de la lista -4. Haz clic en "Leer Seleccionado" para ver su contenido - -#### Trabajar con Adjuntos Recibidos - -Si el correo tiene archivos adjuntos: -1. Los adjuntos aparecerán listados en la sección "Archivos Adjuntos" -2. Para **previsualizar** un adjunto: - - Selecciona el adjunto de la lista - - Haz clic en "Previsualizar" - - Se abrirá una ventana mostrando el contenido (funciona con imágenes y archivos de texto) -3. Para **guardar** un adjunto: - - Selecciona el adjunto de la lista - - Haz clic en "Guardar Adjunto" - - Elige la ubicación donde guardarlo -3. Para guardar todos los adjuntos: - - Haz clic en "Guardar Todos" - - Selecciona la carpeta de destino - -### Descargar Correos (POP3) - -1. Ve a la pestaña "Descargar Correos (POP3)" -2. Haz clic en "Listar Correos" para ver los correos disponibles -3. Selecciona un correo de la lista o ingresa su número -4. Haz clic en "Descargar Seleccionado" para ver su contenido - -## Estructura del Proyecto +## 📂 Estructura del Proyecto ``` -correo/ -├── cliente_correo.py # Archivo principal con toda la funcionalidad +. +├── cliente_correo.py # Código fuente principal de la aplicación +├── ejecutar.sh # Script lanzador para macOS/Linux (verifica versión Python) +├── INSTALACION.md # Guía específica para solucionar errores de entorno en Mac └── README.md # Este archivo ``` -## Funcionalidades Técnicas +## ⚙️ Funcionamiento Interno -### Clase ClienteCorreo +El cliente utiliza las siguientes librerías para la comunicación de red: -- **crear_interfaz()**: Inicializa la interfaz gráfica con pestañas -- **conectar()**: Establece conexión con el servidor IMAP -- **enviar_correo()**: Envía correos mediante SMTP -- **cargar_correos_imap()**: Lista correos en la bandeja de entrada -- **leer_correo_imap()**: Lee un correo específico mediante IMAP -- **listar_correos_pop()**: Lista correos disponibles mediante POP3 -- **descargar_correo_pop()**: Descarga y muestra un correo mediante POP3 -- **decodificar_header()**: Decodifica encabezados de correos -- **obtener_cuerpo_email()**: Extrae el cuerpo del mensaje +1. **`smtplib`**: Se conecta al puerto 25 para enviar mensajes construidos con `MIMEMultipart`. +2. **`imaplib`**: Se conecta al puerto 143, permite listar correos (`search`), obtener cabeceras (`fetch`) y leer contenido bajo demanda. +3. **`poplib`**: Se conecta al puerto 110, permitiendo obtener el número total de mensajes y descargarlos secuencialmente. -## Seguridad +## 🛠️ Solución de Problemas Comunes -- Las contraseñas se manejan en memoria y no se almacenan -- Conexiones sin cifrado SSL/TLS (configuración típica de servidores internos) -- Para entornos de producción, se recomienda usar SSL/TLS - -## Solución de Problemas - -### Error de conexión - -- Verifica que el servidor esté accesible en la IP 10.10.0.101 -- Asegúrate de que los puertos no estén bloqueados por un firewall -- Confirma que las credenciales sean correctas - -### No se pueden cargar los correos - -- Verifica que hayas iniciado sesión correctamente -- Asegúrate de tener correos en tu bandeja de entrada -- Revisa que el servidor IMAP/POP3 esté funcionando - -### Caracteres extraños en los correos - -- El cliente intenta decodificar automáticamente varios encodings -- Si persisten problemas, verifica la codificación del correo original - -## Licencia - -Este proyecto es de código abierto y está disponible para uso educativo. - -## Autor - -Proyecto desarrollado para PSP (Programación de Servicios y Procesos) +* **Error de conexión**: Verifica que la IP del servidor sea alcanzable y que los servicios de correo (Postfix/Dovecot/Mercury) estén corriendo en los puertos estándar (25, 110, 143). +* **Error de Tkinter en Mac**: Ejecuta `./ejecutar.sh` o revisa `INSTALACION.md`.