Skip to content

Proyecto-Info-Aplicada/Email-Server-Python

Repository files navigation

Email Server Python

Servidor REST para envío de correos electrónicos con archivos PDF adjuntos desde un Storage Server, utilizando Gmail API.

🏗️ Arquitectura del Proyecto

Email-Server-Python/
├── src/
│   ├── config/           # Configuración general y logging
│   │   ├── settings.py
│   │   └── logging_config.py
│   ├── connection/       # Conexiones externas (Gmail API)
│   │   └── gmail_connection.py
│   ├── controller/       # Controladores REST (endpoints)
│   │   └── email_controller.py
│   ├── data/            # Acceso a datos (reservado para futuro uso)
│   ├── domain/          # Lógica de negocio (reservado para futuro uso)
│   ├── dto/             # Data Transfer Objects
│   │   └── email_dto.py
│   ├── interfaces/      # Interfaces y contratos
│   │   └── email_interfaces.py
│   └── services/        # Servicios de aplicación
│       ├── gmail_service.py
│       ├── storage_service.py
│       └── send_email_service.py
├── logs/                # Archivos de log
├── main.py             # Punto de entrada de la aplicación
├── credentials.json    # Credenciales de Google Cloud (no subir a Git)
├── token.json         # Token OAuth de Gmail (no subir a Git)
└── requirements.txt   # Dependencias del proyecto

🚀 Instalación y Configuración

Prerrequisitos

  • Python 3.12+
  • Cuenta de Google con Gmail API habilitada
  • Storage Server corriendo en puerto 5000

1. Clonar el repositorio

git clone https://github.com/Proyecto-Info-Aplicada/Email-Server-Python.git
cd Email-Server-Python

2. Crear entorno virtual

python -m venv .venv

3. Activar entorno virtual

Windows (PowerShell):

.\.venv\Scripts\Activate.ps1

Windows (CMD):

.venv\Scripts\activate.bat

Linux/Mac:

source .venv/bin/activate

4. Instalar dependencias

pip install -r requirements.txt

5. Configurar Gmail API

  1. Crear proyecto en Google Cloud Console
  2. Habilitar Gmail API
  3. Crear credenciales OAuth 2.0
  4. Descargar credenciales y guardar como credentials.json en la raíz del proyecto

6. Ejecutar el servidor

python main.py

O usar los scripts incluidos:

Windows:

start-app.bat

� Postman Collection

Para facilitar las pruebas, incluimos una colección de Postman lista para importar:

Archivo: Email-Server-Postman-Collection.json

Cómo importar en Postman:

  1. Abrir Postman
  2. Click en "Import" (esquina superior izquierda)
  3. Seleccionar el archivo Email-Server-Postman-Collection.json
  4. La colección incluye:
    • ✅ Todos los endpoints documentados
    • ✅ Ejemplos de requests completos
    • ✅ Variables de entorno pre-configuradas
    • ✅ Respuestas de ejemplo

�📡 Endpoints

GET /

Verificar estado del servidor

{
  "message": "Email Server corriendo correctamente ✅"
}

POST /send-email-task

Enviar email con PDF adjunto

Request Body:

{
  "CorrelationId": "uuid-del-pdf",
  "EmailAddress": "destinatario@example.com",
  "Subject": "Asunto del correo",
  "MessageBody": "Cuerpo del mensaje",
  "PdfFileName": "documento.pdf"
}

Response (Success):

{
  "status": "success",
  "message": "Correo enviado correctamente a destinatario@example.com"
}

Response (Error):

{
  "error": "Descripción del error"
}

GET /health

Health check del servicio

{
  "status": "healthy",
  "service": "email-server"
}

⚙️ Configuración

Variables de configuración (src/config/settings.py)

# Storage Server
STORAGE_URL = "http://127.0.0.1:5000/pdf-storage"
TIMEOUT_SECONDS = 10

# Gmail API
GMAIL_SCOPES = ['https://www.googleapis.com/auth/gmail.send']
CREDENTIALS_FILE = 'credentials.json'
TOKEN_FILE = 'token.json'

# Servidor
SERVER_HOST = "0.0.0.0"
SERVER_PORT = 5001
DEBUG_MODE = True

🔧 Tecnologías Utilizadas

  • Flask - Framework web
  • Google Gmail API - Envío de correos
  • Requests - Comunicación HTTP con Storage Server
  • Python Logging - Sistema de logs

📝 Logs

Los logs se almacenan en logs/email-server.log con el formato:

2025-10-22 12:00:00,000 | INFO | Mensaje del log

🔒 Seguridad

Archivos sensibles (NO subir a Git):

  • credentials.json
  • token.json
  • .venv/
  • logs/
  • __pycache__/

Estos archivos están incluidos en .gitignore.

🧪 Testing

# Instalar pytest
pip install pytest

# Ejecutar tests (cuando estén implementados)
pytest

🤝 Contribuir

  1. Fork el proyecto
  2. Crear una rama para tu feature (git checkout -b feature/nueva-funcionalidad)
  3. Commit tus cambios (git commit -m 'Agregar nueva funcionalidad')
  4. Push a la rama (git push origin feature/nueva-funcionalidad)
  5. Abrir un Pull Request

📄 Licencia

Este proyecto es parte del curso de Información Aplicada - UCR 2025.


Desarrollado con ❤️ por el equipo de Proyecto-Info-Aplicada

About

Proyecto para enviar correos con PDF obtenido de Storage Server y Hangfire se comunica con Jobs

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •