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.
Paso a paso
Sección titulada «Paso a paso»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.
2. Vuelve a crear tus plantillas
Sección titulada «2. Vuelve a crear tus plantillas»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.
3. Equivalencias de claves e ID
Sección titulada «3. Equivalencias de claves e ID»| 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) |
4. Cambia el import
Sección titulada «4. Cambia el import»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.
5. Turnstile en lugar de reCAPTCHA
Sección titulada «5. Turnstile en lugar de reCAPTCHA»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.
6. Prueba y cambia
Sección titulada «6. Prueba y cambia»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.
7. Opcional: pasa al SDK nativo
Sección titulada «7. Opcional: pasa al SDK nativo»@frontmail/browser o un SDK de framework te dan parámetros tipados, el estado held,
getStatus() y errores tipados.
Sintaxis de las plantillas
Sección titulada «Sintaxis de las plantillas»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.
Comparativa
Sección titulada «Comparativa»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.