---
name: guess_email_formats
kind: function
lang: py
domain: cybersecurity
version: "1.0.0"
purity: pure
signature: "def guess_email_formats(nombre: str, apellidos: str, dominio: str) -> list"
description: "Genera candidatos de email comunes (nombre.apellido, n.apellido, apellido.nombre, inicial+apellido, variantes con dos apellidos, etc.) a partir de nombre, apellidos y dominio. Normaliza acentos y ñ a ASCII en minusculas y deduplica preservando el orden. OSINT pasivo puro, sin red."
tags: [osint-passive, email, enumeration, recon, identity, cybersecurity, python]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: ""
imports: [unicodedata]
params:
  - name: nombre
    desc: "Nombre de pila. Si tiene varios tokens se usa el primero como nombre principal."
  - name: apellidos
    desc: "Uno o dos apellidos separados por espacio. Con dos apellidos se generan variantes que los unen."
  - name: dominio
    desc: "Dominio de correo sin arroba (ej. 'empresa.com'). Si viene con '@' delante se limpia."
output: "Lista de strings '<local>@<dominio>' con los candidatos de email en orden de generacion, sin duplicados."
tested: true
tests:
  - "test_nombre_simple_un_apellido"
  - "test_acentos_y_enie_normalizados"
  - "test_dos_apellidos_genera_variantes_unidas"
  - "test_dedup_preserva_orden"
  - "test_dominio_con_arroba_se_limpia"
test_file_path: "python/functions/cybersecurity/guess_email_formats_test.py"
file_path: "python/functions/cybersecurity/guess_email_formats.py"
---

## Ejemplo

```python
guess_email_formats("José", "García López", "empresa.com")
# ['jose@empresa.com',
#  'jose.garcia@empresa.com',
#  'josegarcia@empresa.com',
#  'j.garcia@empresa.com',
#  'jgarcia@empresa.com',
#  'jose_garcia@empresa.com',
#  'garcia.jose@empresa.com',
#  'joseg@empresa.com',
#  'jose.garcialopez@empresa.com',
#  'josegarcialopez@empresa.com',
#  'jose.lopez@empresa.com',
#  'jgarcialopez@empresa.com']
```

## Cuando usarla

Usala al arrancar una investigacion de identidad cuando conoces nombre + apellidos + dominio de una organizacion y quieres una lista de direcciones probables para verificar despues (MX, catch-all, validacion SMTP, breach lookup). Es el primer paso antes de cualquier comprobacion activa.

## Gotchas

- Funcion pura: NO valida que el email exista ni hace ninguna comprobacion de red. Solo genera candidatos sintacticos.
- La lista de patrones es heuristica (los formatos mas comunes), no exhaustiva: organizaciones con esquemas propios (ej. id numerico) no quedaran cubiertas.
- La normalizacion translitera acentos y ñ a ASCII y elimina cualquier caracter no alfanumerico del local part; nombres con guiones o apostrofes pierden esos separadores.
- Solo usa el primer token del nombre como nombre principal; nombres compuestos (ej. "Maria Jose") no generan variantes con el segundo nombre.
