Generador de código mailto: enlaces con asunto y cuerpo
Un enlace mailto: es como un sobre ya rellenado: el lector solo tiene que revisar el mensaje y darle a enviar.
El generador de CHA: qué es y qué falla
El enlace original de este artículo lleva a CHA’s Mailto Code Generator, de Cook-Hauptman Associates (la página cita como autor a James E. Cook). Es un formulario muy sencillo:
- Rellenas To, CC, BCC, Subject y Body.
- Te devuelve la URL
mailto:o la etiqueta<a href="mailto:…">completa, lista para pegar. - Debajo explica la notación:
?,=,&y los códigos%.
Sigue funcionando, con matices:
| Lo que conviene saber | Por qué importa |
|---|---|
Solo abre bien por http://: por https:// el certificado no es válido |
Si entras con https://, verás un aviso de seguridad |
| Es código de hace más de 25 años: el propio código fuente cita un ejemplo de Netscape de 1999 | No se mantiene |
Codifica con la función antigua escape() |
La ñ sale como %F1 y el ¿ como %BF (Latin-1), no en UTF-8 como pide el estándar actual. Muchos programas de correo mostrarán caracteres raros |
Los saltos de línea salen como %0A |
El estándar pide %0D%0A; la mayoría de clientes lo aceptan igualmente |
Dice que + vale como espacio |
En mailto: no: el + es un carácter real |
Para textos sin tildes te sirve. Para mensajes en español, mejor el generador de abajo.
La sintaxis
<a href="mailto:[email protected][email protected]&subject=Hola&body=Primera%20l%C3%ADnea">
Escríbeme
</a>
| Parte | Para qué sirve | Ejemplo |
|---|---|---|
mailto: |
Indica que es un enlace de correo | mailto:[email protected] |
| Destinatarios | Uno o varios, separados por comas | mailto:[email protected],[email protected] |
? |
Empieza la lista de campos | ?subject=Hola |
& |
Separa un campo del siguiente | ?subject=Hola&body=Qué%20tal |
cc y bcc |
Copia y copia oculta | [email protected] |
subject |
Asunto | subject=Presupuesto |
body |
Cuerpo del mensaje | body=Hola%2C%20Ana |
Las reglas de codificación
Los textos van dentro de una URL, así que algunos caracteres se escriben con un código %:
| Carácter | Se escribe | Por qué |
|---|---|---|
| Espacio | %20 |
El + no vale: en muchas direcciones es un carácter real ([email protected]) |
| Salto de línea en el cuerpo | %0D%0A |
Es el salto de línea que pide el estándar |
&, ?, = |
%26, %3F, %3D |
Si no, se confunden con los separadores |
# |
%23 |
Si no, el navegador lo trata como un ancla |
Tildes, ñ, ¿ |
En UTF-8, como %C3%B1 |
El estándar pide UTF-8 |
Un generador en JavaScript
encodeURIComponent hace casi todo el trabajo. Solo hay que convertir antes los saltos de línea a \r\n para que salgan como %0D%0A:
// Codifica un texto para mailto: espacios como %20 y saltos de línea como %0D%0A
const encode = (text) => encodeURIComponent(text.replace(/\r?\n/g, "\r\n"));
function mailto({ to = [], cc = [], bcc = [], subject = "", body = "" }) {
const fields = [];
if (cc.length) fields.push(`cc=${cc.join(",")}`);
if (bcc.length) fields.push(`bcc=${bcc.join(",")}`);
if (subject) fields.push(`subject=${encode(subject)}`);
if (body) fields.push(`body=${encode(body)}`);
const query = fields.length ? `?${fields.join("&")}` : "";
return `mailto:${to.join(",")}${query}`;
}
console.log(mailto({
to: ["[email protected]"],
cc: ["[email protected]"],
subject: "Presupuesto web & SEO",
body: "Hola, Ana:\n¿Hablamos el lunes?",
}));
Resultado:
mailto:[email protected][email protected]&subject=Presupuesto%20web%20%26%20SEO&body=Hola%2C%20Ana%3A%0D%0A%C2%BFHablamos%20el%20lunes%3F
Fíjate en que el & del asunto se ha convertido en %26: sin eso, el programa de correo cortaría el asunto en «Presupuesto web ».
Límites
- Depende del lector. Si no tiene un programa de correo configurado, el enlace no hace nada útil. Muestra también la dirección en texto.
- Expone la dirección. Las direcciones de un
mailto:en una web pública pueden acabar en listas de spam, incluidas las debcc. - Mensajes cortos. Para formularios largos o adjuntos, usa un formulario de verdad.
Si te interesa cómo elegir una dirección de correo fácil de leer y recordar, mira Direcciones de correo para humanos.
Fuentes
- RFC 6068, «The ‘mailto’ URI Scheme» (IETF): sintaxis, codificación de espacios, saltos de línea, UTF-8 y aviso sobre la exposición de direcciones.
- El generador se ha ejecutado con Node.js 24.21.0; el resultado mostrado es su salida real.
- CHA’s Mailto Code Generator, revisado el 7 de noviembre de 2026: responde por HTTP; por HTTPS da un certificado autofirmado. Su código usa
escape(); la salida deescape("Año")(A%F1o) yescape("¿Hablamos?")(%BFHablamos%3F) se ha comprobado con Node.js 24.21.0. - Se ha quitado la imagen decorativa de banco del original.