Menu

Tree [86c530] master /
 History

HTTPS access


File Date Author Commit
 app 2026-02-20 Rodrigo Gonzalez Rodrigo Gonzalez [1fd607] Ajuste tabla de aprobacion visual y funcionalidad
 .gitignore 2025-05-20 Rodrigo Gonzalez Rodrigo Gonzalez [7fe84b] ajustes nuevos
 README.md 2026-03-18 Rodrigo Gonzalez Rodrigo Gonzalez [86c530] Readme Mailer
 requirements.txt 2025-06-20 Rodrigo Gonzalez Rodrigo Gonzalez [e88a0e] Creacion de flujo completo para recepcion de ca...
 sincronizar_correos.py 2026-02-05 Rodrigo Gonzalez Rodrigo Gonzalez [03c699] Ajuste de nueva version de mail aecsa

Read Me

Mail Aecsa

Mail Aecsa es una aplicación web construida con FastAPI/Flask‑style (Starlette) que permite a los usuarios conectarse a un servidor SMTP para leer, filtrar y enviar correos. La arquitectura se organiza en cinco paquetes clave:

  • auth – Autenticación SMTP y puentes de conexión a MongoDB/MySQL.
  • correo – Lógica de correo entrante/saliente y búsqueda de adjuntos; consulta a API externa AECSoft.
  • utils – Helpers de formato, ordenamiento de correos y consultas SQL contra el backend.
  • static – CSS/JS estáticos (Bootstrap 5 + CKEditor).
  • templates – Plantilla Jinja2 index.html que muestra la UI del cliente de correo.

Tabla de Contenidos

Sección Descripción
🚀 Instalación Requisitos, .env, paquetes.
⚙️ Configuración Variables de entorno (settings.py).
🔄 Flujo de Trabajo Inicio → autenticación → consultas → respuestas / aprobaciones.
📬 Endpoints POST /auth, /email/init, /consultar-alias … (ver lista completa abajo).
🛠️ Operaciones Internas CorreoCliente.conexion(), MongoConector.guardar_correos_bulk()
📁 Estructura de Directorios Rutas y responsabilidades.
👥 Contribuyentes Autor, licencias, agradecimientos.

Instalación

# Clonar el proyecto
git clone git@gitlab.aecsa.co:aecsoft/transversales/mail-mongo.git

# Crear entorno virtual e instalar dependencias
python -m venv .venv
source .venv/bin/activate        # Windows: .\.venv\Scripts\activate

pip install -r requirements.txt

El archivo .env debe contener al menos:

AECMAIL_SERVER_COM="smtp.comcorreo.co"
AECMAIL_SERVER_94="smtp.94correo.com"
AECMAIL_PORT=587
EMAIL_HOST="imap.mailserver.com"
SMTP_HOST="smtp.gmail.com"
PORT_SMTP=465
HOST_MONGO="mongodb.local"
PORT_MONGO=27017
DB_NAME_MONGO="mailmig"
HOST_MYSQL="localhost"
USER_MYSQL="root"
PASS_MYSQL=""
NUEVO_AECSOFT_AUTH_KEY="claveapi123"
APP_HOST="0.0.0.0"
APP_PORT=8000
SECRET_KEY="supersecreto"
ADJUNTO_CORREO=20
PAGINACION_CORREO=50
MAX_ATTACHMENT_SIZE_MB=10
ALGORITHM="HS256"
ENTORNO_LOCAL=1
INFO_CUENTAS=[]
USERNAME_API=""
PASSWORD_API=""
URL_API="https://api.example.com"
URL_AECSOFT="https://aecsoft.com"
URL_APP="http://localhost:8000"

Flujo de Trabajo

Paso Acción
1. InicioGET /mail_aecsa (renderiza index.html).
2. AutenticaciónPOST /auth. Crea objeto CorreoCliente, guarda token JWT y redirige con /email/init.
3. Inicialización/email/init valida credenciales y configura sesión.
4. Consulta de CorreosPOST /consultar-correo. Devuelve mensajes paginados.
5. AdjuntosGET /descargar-adjunto?msg_idx=...&part_idx=...

Endpoints Relevantes

POST   /auth                          # Login, crea token y firma
GET    /email/init                    # Configura la sesión con parámetros decodificados
GET    /mail_aecsa                    # Renderiza vista principal (Jinja2)
POST   /consultar-alias               # Busca remitentes por cartera
POST   /consultar-correo              # Devuelve correos filtrados y paginados
POST   /get-arco          ...         # Operaciones de AECSoft y aprobaciones
PUT    /aprobacion-envio         # Actualiza estado de aprobación
GET    /descargar-adjunto          # Descarga archivo adjunto

Tip: Todos los endpoints que manipulan correo usan Depends(get_correo_cliente) o Depends(get_mongo_conexion) para inyectar la conexión correspondiente.

Operaciones Internas

  • CorreoCliente – Clase en app/auth/correo_conexion.py. Encapsula conexiones IMAP y SMTP, manejo de configuración por dominio.
  • MongoConector (CorreoMongo) – Guarda y consulta correos con índices basados en idx, usuario.
  • ConexionCartera – Wrapper sobre MySQL que ejecuta queries dinámicos para la lógica de carteras (funciones en utils/consulta_sql_api.py).

Estructura de Directorios

app/
├─ auth/            # Autenticación y conexiones a DB
│   ├─ generara_auth.py  # JWT & firma
│   ├─ correo_conexion.py
│   └─ mysql_conexion.py
├─ correo/         # Lógica de email inbound/outbound
│   ├─ buscar_adjuntos.py
│   ├─ consulta_aecsoft.py
│   ├─ ... (flujos de envío y aprobación)
├─ utils/
│   ├─ formateo_fecha.py
│   ├─ ordenar_correos.py
│   └─ consulta_sql_api.py
├─ static/         # assets CSS/JS
├─ templates/      # Jinja2 `index.html`
└─ main.py, config.py, .env

Contribución

  1. Fork → Clone
  2. git checkout -b feature/nueva_func
  3. Implementa cambios y escribe tests (pytest).
  4. Commit, push & PR.

Licencia: MIT (ver LICENSE).

Auth0 Logo