--- 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 '@' 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.