Ir al contenido

Migrar desde EmailJS

Frontmail está diseñado para que pasar desde EmailJS lleve minutos: el SDK de navegador tiene las mismas firmas de funciones, la API REST acepta los mismos campos y la sintaxis de las plantillas es compatible en las plantillas sencillas.

1. Crea tu organización y conecta el servicio

Sección titulada «1. Crea tu organización y conecta el servicio»

Crea una cuenta en app.frontmail.dev y conecta el mismo proveedor de correo que usas en EmailJS (consulta Servicios). Si usabas un servicio de Gmail u Outlook, vuelve a conectarlo mediante OAuth; para proveedores SMTP o con API, introduce las mismas credenciales.

Crea una plantilla por cada plantilla de EmailJS. Copia el asunto, To, From, Reply-To y el contenido. Después haz clic en Detectar en la plantilla y define los tipos y qué parámetros son obligatorios; consulta las diferencias en sintaxis de las plantillas más abajo.

EmailJS Frontmail Dónde encontrarlo
Public Key (user_id) Clave pública pk_… Seguridad → Clave pública
Private Key (accessToken) Clave privada sk_…, solo en el servidor Seguridad → Claves privadas (se muestra una sola vez)
Service ID ID del servicio svc_… Servicios de correo
Template ID ID de la plantilla tpl_… Plantillas
Lista de dominios permitidos Sitios web permitidos Seguridad → Sitios web permitidos
reCAPTCHA Cloudflare Turnstile con tu propio widget gratuito Claves en Seguridad → Protección contra bots (Turnstile); en cada plantilla, Ajustes → Protección → Exigir CAPTCHA (Turnstile)
import emailjs from '@emailjs/browser';
import emailjs from '@frontmail/emailjs-compat';

Tus llamadas a emailjs.init(), emailjs.send() y emailjs.sendForm() siguen funcionando; solo cambian los ID y la clave. Consulta Compatibilidad con EmailJS.

¿Usas el script del CDN? Sustituye el <script> de EmailJS por la versión compat, que expone la misma variable global emailjs, así que tus llamadas no cambian:

<script
src="https://cdn.jsdelivr.net/npm/@frontmail/emailjs-compat@0.1.0/dist/emailjs-compat.umd.js"
integrity="sha384-RH+fuNzBqTKgxDJBHRmWfOn37fs33L+Or1ujDV7wThynx9FxD9uPptLu80LpCrEc"
crossorigin="anonymous"></script>

Fija la versión exacta y conserva el atributo integrity; consulta Fija la versión para saber dónde encontrar el hash de las versiones más recientes.

Como alternativa, carga el SDK nativo (@frontmail/browser, con la versión fijada del mismo modo) y cambia las llamadas emailjs. por frontmail.: los argumentos son los mismos, pero la promesa se resuelve con status: 'queued' o 'held' en lugar de 200.

¿Llamas directamente a la API REST? Cambia el host a https://api.frontmail.dev. Las rutas /api/v1.0/email/send y /api/v1.0/email/send-form y los campos del cuerpo no cambian.

Si tus plantillas usaban reCAPTCHA, quita el widget de reCAPTCHA y añade Turnstile. Igual que con reCAPTCHA, usas claves de tu propia cuenta: crea un widget gratuito de Turnstile en Cloudflare, pega sus claves en Seguridad → Protección contra bots (Turnstile) y haz clic en Activar la CAPTCHA en todas las plantillas; a partir de entonces, las plantillas nuevas la exigen por defecto. Coloca el widget con tu clave de sitio en el formulario; consulta Turnstile. El campo g-recaptcha-response no se usa.

Haz un envío de prueba desde el editor de plantillas, publica y vigila Historial. Conserva tu cuenta de EmailJS hasta que hayas visto pasar tráfico real.

@frontmail/browser o un SDK de framework te dan parámetros tipados, el estado held, getStatus() y errores tipados.

Frontmail usa Handlebars; EmailJS usa una sintaxis parecida a Mustache. Casos habituales:

EmailJS Frontmail Notas
{{name}} {{name}} Igual. En Frontmail siempre se escapa como HTML.
{{{html_content}}} {{html_content}} con el tipo de parámetro html En Frontmail, las llaves triples no desactivan el escapado; usa el tipo html, que se sanea.
Secciones tipo {{#if}} de Mustache {{#name}}…{{/name}} {{#if name}}…{{/if}} Usa bloques explícitos de Handlebars.
Sección invertida de Mustache {{^name}}…{{/name}} {{#unless name}}…{{/unless}}
Listas mediante secciones {{#each items}}…{{/each}} con un parámetro list Define itemFields para la validación.
– {{formatDate}}, {{formatMoney}}, {{eq}}… Helpers adicionales.

Los valores predeterminados definidos en los campos de las plantillas de EmailJS corresponden al default del parámetro en Frontmail.

Una comparativa objetiva de las funciones relevantes para migrar, a septiembre de 2026. Los precios y los límites de ambos servicios cambian con el tiempo: consulta las páginas de cada proveedor antes de decidir.

EmailJS Frontmail
Cuando se agota la cuota mensual Las solicitudes se rechazan hasta el siguiente periodo o una mejora de plan Los mensajes se retienen y se envían automáticamente cuando se añaden créditos; sobregiro y recarga automática opcionales
Paquetes de créditos prepagados con validez No se ofrecen Paquetes de 5k / 25k / 100k válidos de 3 a 12 meses, en todos los planes
Límite de frecuencia de la API REST 1 solicitud por segundo De 2 a 50 solicitudes por segundo según el plan, además de /v1/send-batch
Lenguaje de plantillas Variables con secciones sencillas Handlebars con condiciones, bucles, helpers y parámetros tipados y validados
CAPTCHA reCAPTCHA v2 Cloudflare Turnstile, activado en todas las plantillas con un clic
Conmutación por error (failover) del proveedor No se ofrece Servicio de respaldo por plantilla, comprobaciones de estado diarias
Seguimiento de la entrega No se ofrece Entregado / rebotado / queja / abierto / clic mediante webhooks del proveedor
Reintentos e idempotencia en el SDK No documentados Reintentos automáticos con claves de idempotencia
SDK para frameworks SDK de navegador, SDK de React Native Navegador, React, React Native, Vue, Svelte, Node, compatible con EmailJS

Si ves algún dato desactualizado, avísanos en support@frontmail.dev y lo corregiremos.