MailMask para SaaS
Tu SaaS envía campañas y avisos a nombre de tus clientes. Con MailMask cada cliente es un tenant con su propia reputación: si un cliente manda basura, se pausa ese cliente y los demás siguen enviando.
Los clientes de tu app
Estudio Aurora
hola@estudioaurora.mx
Panadería La Espiga
hola@espiga.correo.tuapp.com
cliente-42
ofertas@lista-comprada.com
tenant.paused llegó a tu webhook. Sólo cliente-42 dejó de enviar; Estudio Aurora y La Espiga siguen.
Un cliente puede pausar a todos los demás
Si todos tus clientes envían desde la misma cuenta de correo, la lista comprada de un solo cliente sube las quejas de la cuenta entera. Cuando el proveedor pausa esa cuenta, también se detienen las confirmaciones de cita de los clientes que no hicieron nada.
El remitente es tu app, no el negocio
Las campañas salen desde avisos@tuapp.com.
Los lectores no reconocen al remitente, y el negocio nunca construye la reputación de su
propio dominio.
Tu app da de alta a cada cliente con su propio id. MailMask hace el alta del dominio, revisa la reputación de cada cliente por separado y te avisa por webhook de todo lo que pasa.
Un tenant de SES por cliente
Cada dominio de cliente es un tenant de Amazon SES con reputación aislada. Si un cliente manda basura, la pausa le toca sólo a ese cliente.
Pausa automática antes que AWS
Con 200 envíos o más en 7 días, si las quejas llegan a 0.1 % o los rebotes permanentes a 2 %, MailMask pausa al cliente y te manda tenant.paused.
Su dominio o un subdominio tuyo
El cliente con dominio pega los registros que le muestras. El cliente sin dominio usa un subdominio tuyo, como estudio-aurora.correo.tuapp.com: con tu zona en MailMask, los registros se escriben solos.
Baja de un clic (RFC 8058)
Cada campaña lleva List-Unsubscribe y List-Unsubscribe-Post. MailMask recibe la baja, suprime al lector y te manda contact.unsubscribed.
Avisos y campañas por separado
El stream transactional no lleva baja. Quien se da de baja de las promociones de un negocio sigue recibiendo la confirmación de su cita.
Webhooks firmados
Un webhook para todos tus clientes, firmado con HMAC-SHA256: entregado, rebotado, queja, baja, cliente en pausa y dominio verificado. Si tu servidor no responde, se reintenta a 1 min, 5 min, 30 min, 2 h y 12 h.
SDK de TypeScript y CLI
MailMaskPartner firma cada petición por ti. La CLI mailmask partner hace lo mismo desde la terminal, con --json en todo.
Cobro por tenant activo al mes
Un cliente cuenta cuando envió al menos un correo en el mes. Los clientes que ese mes no enviaron nada no se cobran.
tenants.put da de alta al cliente con el id que ya usa tu app. Llamarla dos veces no duplica nada.
domains.add regresa los registros DNS que el cliente pega en su panel: verificación, DKIM, SPF, el MAIL FROM y el TXT _mailmask de tu app.
batch encola hasta 10,000 destinatarios. Los lectores dados de baja se saltan solos, y la misma llave de idempotencia en 24 horas no vuelve a enviar.
import { MailMaskPartner } from "@easybits.cloud/mailmask";
const mm = new MailMaskPartner({
keyId: process.env.MAILMASK_PARTNER_KEY_ID!, // mmk_…
secret: process.env.MAILMASK_PARTNER_SECRET!, // mms_…
});
// 1. El cliente, con el id de tu app
await mm.tenants.put("estudio-aurora", { name: "Estudio Aurora" });
// 2. Su dominio: regresa los registros DNS a pegar
const domain = await mm.domains.add("estudio-aurora", "estudioaurora.mx");
// 3. La campaña: stream broadcast, con baja de un clic
const batch = await mm.batch("estudio-aurora", {
from: "Estudio Aurora <hola@estudioaurora.mx>",
subject: "Ya abrimos la agenda de noviembre",
html: "<p>Aparta tu cita en línea.</p>",
recipients: ["ana@example.com", "luis@example.com"],
});
Deník · agenda de citas
Estudio Aurora manda su campaña desde estudioaurora.mx
En Deník cada negocio manda campañas a sus clientes desde su propio dominio. Estudio Aurora, el negocio de demostración de Deník, anuncia su agenda de noviembre por el stream de campañas, y sus confirmaciones de cita siguen por el stream transaccional aunque un lector se dé de baja.
Formmy · newsletter
El newsletter de cada cliente sale con el nombre de ese cliente
Formmy manda el newsletter de cada uno de sus clientes desde el dominio de ese cliente. Un cliente con quejas se pausa solo, y el newsletter de los demás clientes de Formmy sale a tiempo.
Ghosty · agentes para negocios
Cada negocio de ghosty.studio es un tenant
Ghosty opera a los negocios que atienden sus agentes como tenants de MailMask. El correo que manda el agente de un negocio sale desde el dominio de ese negocio, con su propia reputación.
No. Cada cliente de tu app es un tenant que identificas con tu propio id (externalId). El cliente sólo pone en su DNS los registros que tu app le muestra.
El cliente pone los registros de correo una sola vez y agrega un TXT _mailmask por cada app. Cada app envía sólo cuando ve su propio TXT, así que apartar un dominio ajeno no da permiso de enviar desde él.
Una pausa que pusiste tú con pause la quitas tú con resume. Una pausa por quejas o rebotes la quita MailMask después de revisar el caso.
Cada tenant tiene un tope de envíos al mes que se fija en el plan de tu app. Un lote lleva hasta 10,000 destinatarios, sale en segundo plano y se acepta si cabe en lo que le queda del mes al tenant.
Por tenant activo al mes: un cliente de tu app cuenta cuando envió al menos un correo ese mes. El precio depende de tu volumen; escríbenos a apps@mailmask.studio y lo platicamos.
Sí. Con la misma idempotencyKey en 24 horas, MailMask devuelve la respuesta guardada sin volver a enviar ni gastar cuota. El SDK pone una llave sola si no mandas la tuya.
Docs
La documentación de MailMask
El SDK, la CLI, la API REST, SMTP y el MCP de MailMask, con ejemplos que puedes copiar.
Guía
Cómo enviar correo desde tu propio dominio
Los registros SPF, DKIM y DMARC que hacen que un correo llegue a la bandeja de entrada y no al spam. Qué hace cada uno y cuál se te puede olvidar.
Cuéntanos qué manda tu app y a cuántos clientes. Te damos de alta como partner, emites tu credencial y cada cliente envía desde su dominio en cuanto sus registros DNS quedan verificados.