Correo
Cada proyecto trae Correo: tu propio Resend dentro de Fundaia. Envías desde tus dominios con DKIM, ves cada correo y lo que le pasó, y tu código usa los SDK oficiales de Resend sin cambiar nada más que la dirección. Está en la barra del proyecto (Correo), en fundaia email y en el servidor MCP.
Empezar en cuatro pasos
- Añade un dominio en Correo › Dominios (
fundaia email domains add example.com). Mejor un subdominio dedicado, comomail.example.com: separa la reputación del correo de tu dominio principal. - Publica sus registros DNS. Si la zona está en una cuenta de Cloudflare que la instancia alcanza, Configurar DNS automáticamente los escribe por ti. Si no, cópialos en tu proveedor:
| Registro | Tipo | Nombre | Para qué |
|---|---|---|---|
| DKIM | TXT | fundaia-xxxx._domainkey | Firma cada correo con la clave de tu dominio |
| SPF | TXT | send | Autoriza a la plataforma a enviar en nombre del dominio de rebotes |
| Rebotes | MX | send | Devuelve los rebotes a Fundaia (cuando la instancia recibe correo) |
| DMARC | TXT | _dmarc | Recomendado: v=DMARC1; p=none; para empezar |
| Recepción | MX | @ | Solo si activas Recibir correo |
Nunca se sobrescribe una política SPF ni un MX que ya tengas: si existen, te decimos qué añadir.
- Espera a la verificación. Fundaia comprueba los registros con resolvedores públicos, a menudo los primeros minutos y luego cada media hora. Puedes forzarlo con Verificar ahora. Pasadas 72 horas sin verificar, el dominio queda como fallido; corrige los registros y vuelve a verificar.
- Crea una clave en Correo › Claves API o conecta un servicio. La clave se muestra una sola vez.
Enviar desde tu código
La API vive en https://infrastructure.fundaia.com/api/email y habla el mismo idioma que la de Resend: las mismas rutas, los mismos campos y los mismos errores. Con el SDK oficial de Node basta con su baseUrl:
import { Resend } from 'resend'
const resend = new Resend(process.env.RESEND_API_KEY, { baseUrl: process.env.RESEND_BASE_URL })
await resend.emails.send({
from: 'Tienda <hola@mail.example.com>',
to: 'ana@example.org',
subject: 'Tu pedido está en camino',
html: '<p>Gracias por tu compra</p>',
})
El SDK de Node también lee RESEND_BASE_URL del entorno, así que muchas veces no hay que tocar el código. Desde cualquier otro lenguaje, una petición HTTP:
curl https://infrastructure.fundaia.com/api/email/emails \
-H "Authorization: Bearer fdm_..." \
-H "Content-Type: application/json" \
-d '{"from":"hola@mail.example.com","to":"ana@example.org","subject":"Hola","text":"Hola"}'
Conectar un servicio
Conectar a un servicio (o fundaia email connect api) crea una clave de solo envío para ese servicio y le escribe RESEND_API_KEY (sellada) y RESEND_BASE_URL, y además SMTP_HOST, SMTP_PORT, SMTP_USER y SMTP_PASSWORD cuando la instancia acepta SMTP. El servicio las recibe en su próximo despliegue.
Por SMTP
Si tu aplicación solo sabe enviar por SMTP, usa el servidor y el puerto que muestra Correo › Resumen, el usuario fundaia y tu clave como contraseña. Lo que llega por SMTP pasa por las mismas reglas que la API.
Qué admite un envío
from,to,cc,bccyreply_to, con nombre o sin él ("Ana <ana@example.org>"). Hasta 50 destinatarios entreto,ccybcc.htmlytext. Si solo mandas HTML, la versión de texto se genera sola.attachments:contenten base64 opathcon una URL pública; hasta 40 MB por correo. Concontent_idel adjunto va incrustado (<img src="cid:logo">). No se admiten ejecutables.tags([{ "name": "categoria", "value": "pedido" }]), que vuelven en los webhooks, yheaderspropios.From,Subject,Message-IDy similares los pone la plataforma.scheduled_at: una fecha ISO 8601 o una frase comoin 10 minutesoen 2 horas, como mucho a 30 días. Un correo programado se puede reprogramar o cancelar hasta que sale.- La cabecera
Idempotency-Key: repetir una petición con la misma clave durante 24 horas devuelve el mismo correo, sin enviarlo dos veces. Usarla con otro contenido es un error 409. - Lotes:
POST /emails/batchcon hasta 100 correos (sin adjuntos ni programación). Conx-batch-validation: permissive, los correos válidos salen y los demás vuelven enerrors. template:{ "id": "bienvenida", "variables": { "nombre": "Ana" } }envía con una plantilla publicada.
Direcciones de prueba
delivered@resend.dev, bounced@resend.dev, complained@resend.dev y suppressed@resend.dev simulan cada resultado sin enviar nada a nadie, también con etiquetas (delivered+pedidos@…). Sirven para probar tus webhooks antes de verificar un dominio.
Lo que le pasa a cada correo
Correo › Correos lista todo lo que enviaste, con su estado: en cola, programado, enviándose, enviado, entregado, entrega retrasada, rebotado, queja, fallido o cancelado. El detalle muestra cada destinatario con la última respuesta de su servidor, la línea de tiempo, las cabeceras, los adjuntos y una vista previa del HTML (aislada: nunca ejecuta nada del correo).
- Reintentos: si el servidor del destinatario dice «más tarde», Fundaia lo reintenta a 1, 5, 15 y 30 minutos, a 1, 2 y 4 horas, y luego cada 8 horas, hasta 72 horas. Pasado ese plazo, el correo cuenta como rebotado.
- Rebotes y quejas: un rebote definitivo o una queja de spam añaden la dirección a la lista de supresión del proyecto, y no se le vuelve a escribir. La lista se ve, se busca y se edita en Correo › Supresiones.
- Seguimiento: activa en el dominio el seguimiento de aperturas (una imagen invisible) y de clics (los enlaces pasan por la plataforma). Cada apertura cuenta una vez por destinatario; los clics, todos.
- Conservación: el contenido de los correos se guarda 30 días; el registro de cada envío, lo que diga tu plan.
Audiencias y difusiones
Una audiencia es una lista de contactos: añádelos uno a uno, por la API o importando un CSV con una columna email (y opcionalmente nombre, apellidos y baja).
Una difusión es un correo para toda una audiencia. Cada contacto recibe el suyo, personalizado con {{{FIRST_NAME|amiga}}}, {{{LAST_NAME}}} o {{{EMAIL}}}, y con un enlace de baja: {{{RESEND_UNSUBSCRIBE_URL}}} en el cuerpo, además de la baja en un clic que Gmail y Outlook muestran junto al remitente. Quien se da de baja deja de recibir difusiones de ese proyecto. Antes de enviar puedes mandarte una prueba; después, el detalle cuenta entregas, aperturas, clics y rebotes.
Plantillas
Una plantilla guarda asunto, remitente, HTML y texto con variables: {{nombre}} se escapa como HTML y {{{nombre}}} va tal cual, las dos con un valor por defecto opcional ({{nombre|cliente}}). Editas un borrador, lo previsualizas con valores de ejemplo y lo publicas: los envíos usan siempre la versión publicada, así que puedes trabajar en la siguiente sin romper nada.
Webhooks
Correo › Webhooks manda cada evento a tu endpoint HTTPS: email.sent, email.delivered, email.delivery_delayed, email.bounced, email.complained, email.opened, email.clicked, email.failed, email.scheduled, email.received, contact.created, contact.updated, contact.deleted, domain.created, domain.updated y domain.deleted.
Cada petición va firmada como las de Resend, con las cabeceras svix-id, svix-timestamp y svix-signature, así que la librería svix la verifica con la clave whsec_… que ves una sola vez al crear el webhook. Si tu endpoint no contesta con un 2xx, se reintenta a los 5 segundos, 5 y 30 minutos, y 2, 5 y 10 horas. Cada entrega se ve con su respuesta y se puede reintentar a mano.
Correo entrante
Activa Recibir correo en un dominio y publica su MX. Lo que llegue a cualquier dirección de ese dominio aparece en Correo › Recibidos, con sus adjuntos y el .eml original, y dispara email.received. Un dominio recibe en un solo proyecto. La recepción depende de que la instancia tenga configurado su servidor de entrada; si no lo tiene, Correo › Resumen lo dice.
Planes
Correo se contrata aparte del plan de la plataforma, por espacio de trabajo, en Facturación › Correo:
| Plan | Precio | Correos al mes | Al día | Dominios | Excedente |
|---|---|---|---|---|---|
| Gratis | 0 € | 3.000 | 100 | 1 | No: se para al llegar |
| Pro | 15 €/mes | 50.000 | Sin límite | 10 | 0,80 € por cada 1.000 |
| Escala | 75 €/mes | 150.000 | Sin límite | 100 | 0,60 € por cada 1.000 |
| Empresa | A medida | A medida | A medida | A medida | Escríbenos |
Cuenta cada destinatario de cada correo. Las direcciones de prueba y las suprimidas no cuentan. Todas las funciones están en todos los planes. La API acepta hasta 10 peticiones por segundo por clave.
Registros de la API
Correo › Registros guarda cada llamada a la API durante 30 días: la clave, el método, la ruta, la respuesta, cuánto tardó y desde qué cliente.
Cómo sale el correo de la plataforma
Quien administra la instancia elige por dónde sale el correo:
- Sandbox: nada sale de la plataforma. Cada correo se guarda y se ve como entregado. Es lo que hay mientras la instancia no tiene salida, y Correo › Resumen lo avisa.
- Directo: la plataforma entrega a los servidores de cada destinatario por el puerto 25.
- Relay: la plataforma firma y entrega a un servidor SMTP intermedio, por ejemplo un MTA propio con IP limpia.
En los tres casos el DKIM es el de tu dominio, así que cambiar de salida no te obliga a tocar tu DNS.