Ir al contenido

Archivos adjuntos e imágenes incrustadas

Frontmail admite cuatro formas de añadir archivos a un correo. Los archivos adjuntos están disponibles en los planes de pago; el tamaño total máximo por solicitud depende del plan (consulta Planes).

Método Dónde se configura Para qué sirve
Adjuntos fijos Ajustes de la plantilla El mismo archivo en todos los correos (lista de precios, PDF de condiciones)
Base64 dinámico attachments en la solicitud de envío Archivos pequeños generados (≤ unos cientos de kB)
Subidas POST /v1/uploads y después attachments: [{ upload_id }] Archivos más grandes, archivos que eligen los usuarios
Archivos de formulario Campos de archivo de sendForm() / /v1/send-form Archivos adjuntos a un formulario HTML

Los adjuntos fijos son archivos que se adjuntan a todos los correos enviados con la plantilla (hasta 10 por plantilla). Se guardan en S3 y cuentan para el límite de tamaño por solicitud. El editor de plantillas los muestra en Ajustes → Protección → Archivos adjuntos fijos; todavía no se pueden subir desde el panel: escribe a support@frontmail.dev si necesitas configurar alguno.

Primero activa Permitir archivos adjuntos desde el formulario en Ajustes → Protección de la plantilla; si no, las solicitudes con adjuntos fallan con attachments_not_allowed.

await send('svc_01J9…', 'tpl_invoice', { name: 'Lucía' }, {
attachments: [
{ filename: 'factura.pdf', contentType: 'application/pdf', contentBase64: pdfBase64 },
],
});
"attachments": [
{ "filename": "factura.pdf", "content_type": "application/pdf", "content_base64": "JVBERi0xLjcK…" }
]

Base64 aumenta la solicitud en un tercio: para cualquier cosa de más de unos cientos de kilobytes, usa las subidas.

  1. Pide una URL de subida (clave pública o privada):

    Ventana de terminal
    curl https://api.frontmail.dev/v1/uploads \
    -H 'Content-Type: application/json' \
    -H 'X-Frontmail-Public-Key: pk_4f2a…' \
    -d '{ "filename": "cv.pdf", "content_type": "application/pdf", "size": 482113 }'
    {
    "upload_id": "upl_01J9Z3",
    "url": "https://uploads.frontmail.dev/…",
    "method": "PUT",
    "headers": { "Content-Type": "application/pdf" },
    "expires_at": "2026-09-24T11:00:00Z"
    }
  2. Sube el archivo con PUT a url con las headers devueltas antes de expires_at.

  3. Haz referencia a él en el envío: "attachments": [{ "upload_id": "upl_01J9Z3" }].

El size declarado se comprueba de antemano con el límite de tu plan (attachment_too_large) y el objeto guardado se vuelve a comprobar cuando se envía el mensaje.

Con sendForm(), cada <input type="file"> del formulario se convierte en un archivo adjunto:

<input type="file" name="cv" accept="application/pdf">

Los adjuntos dinámicos vienen de cualquiera que pueda usar tu formulario, así que Frontmail rechaza con attachments_not_allowed los tipos de archivo que ejecutan código o que suelen usarse para phishing: ejecutables e instaladores (.exe, .msi, .msix, .appx, .scr, .com, .bat, .cmd, .cpl, .dll, .jar, .app, .pkg, …), scripts (.js, .jse, .vbs, .wsf, .ps1, .hta, …), accesos directos (.lnk, .url, .library-ms, …), imágenes de disco (.iso, .img, .vhd, .vhdx, .dmg), páginas web e imágenes vectoriales (.html, .htm, .xhtml, .mht, .svg), OneNote (.one) y archivos de Office con macros (.docm, .xlsm, .pptm, …). Antes se limpian los nombres de archivo: se eliminan los caracteres invisibles y de derecha a izquierda (que se usan para disfrazar invoice<U+202E>fdp.exe como invoiceexe.pdf) y los puntos o espacios finales, así que report.exe. cuenta como .exe.

Con la clave pública, POST /v1/uploads necesita además al menos una plantilla que permita archivos adjuntos desde el formulario, y las subidas comparten un presupuesto diario de 200 × el límite de adjuntos de tu plan por organización.

Tienes dos opciones:

  • Imágenes alojadas: usa una URL absoluta https:// en <img src>. Lo mejor para logotipos y elementos decorativos: los correos son pequeños y los clientes cargan las imágenes cuando hace falta.
  • Imágenes CID: un adjunto fijo con un content ID, p. ej. logo, referenciado como <img src="cid:logo" alt="Ejemplo S.L.">. La imagen va incrustada en el correo, así que se ve aunque se bloqueen las imágenes remotas, pero hace que cada correo sea más grande.

Pon siempre alt en las imágenes: las comprobaciones de la plantilla avisan cuando falta.