Compatibilidad con EmailJS (@frontmail/emailjs-compat)
@frontmail/emailjs-compat expone las mismas funciones y firmas que @emailjs/browser, pero se
comunica con Frontmail. El código existente sigue funcionando después de cambiar el import y los ID.
npm uninstall @emailjs/browsernpm install @frontmail/emailjs-compatimport emailjs from '@emailjs/browser';import emailjs from '@frontmail/emailjs-compat';
emailjs.init({ publicKey: 'pk_4f2a…' });emailjs.send('svc_01J9…', 'tpl_01J9…', { name: 'Jana' });emailjs.sendForm('svc_01J9…', 'tpl_01J9…', '#contact-form');Qué es compatible
Sección titulada «Qué es compatible»init(publicKey)einit({ publicKey, blockHeadless, blockList, limitRate, storageProvider }), con un segundo argumento opcional para el origen de la API (por defectohttps://api.frontmail.dev).send(serviceID, templateID, templateParams?, options?)ysendForm(serviceID, templateID, form, options?), conoptionscomo cadena de clave pública o como objeto de opciones.- El valor resuelto es un
EmailJSResponseStatusconstatus(200) ytext('OK'), como en EmailJS, más los extras de Frontmail:messageId,deliveryStatus('queued'o'held') ystatusToken. - Los errores se lanzan como objetos
EmailJSResponseStatusconstatusytext, así que los manejadorescatchexistentes siguen funcionando. ElFrontmailErrorsubyacente (concodeydocsUrl) está enerror.error. - Las rutas REST
/api/v1.0/email/sendy/api/v1.0/email/send-formexisten enapi.frontmail.dev, con los campos del cuerpo de EmailJSservice_id,template_id,user_id,template_params,accessToken.
Qué cambia
Sección titulada «Qué cambia»- Los ID y las claves son los de Frontmail:
svc_…,tpl_…,pk_…,sk_…. - Las plantillas usan la sintaxis de Frontmail (Handlebars) y parámetros tipados. La mayoría de las
plantillas con
{{variable}}funcionan sin cambios; consulta la guía de migración. - Frontmail puede resolver con un mensaje retenido cuando te quedas sin créditos (sigue siendo
un éxito). La capa de compatibilidad lo indica como
status: 200condeliveryStatus: 'held';@frontmail/browserdevuelve directamentestatus: 'held'. - Frontmail reintenta automáticamente los errores de red y los 5xx con una clave de idempotencia.
- Las traducciones de plantillas no son compatibles: EmailJS no tiene ese concepto. El paquete
compat y las rutas
/api/v1.0/email/…envían siempre el idioma predeterminado de la plantilla (unlocaleen el cuerpo se ignora y un campo de formulariofm_localees un parámetro normal de la plantilla). Usa@frontmail/browsercon la opciónlocalepara elegir un idioma. accessToken(una clave privada) se rechaza en el navegador:send/sendFormse rechazan constatus: 400yerror.code === 'private_key_in_browser'. Quítalo del código frontend: consulta la guía de migración. El código de servidor (Node.js, sindocument) todavía puede pasarlo.sendFormomite los campos de contraseña, los campos anti-CSRF de los frameworks habituales y los nombres reservados comoaccessToken(consulta sendForm).blockHeadless,blockListylimitRatese ejecutan en el navegador y son una comodidad, no un control de seguridad: aplica los límites en Seguridad en el panel.
Cuando estés listo, pasar a @frontmail/browser o a un SDK de framework es
sencillo y te da resultados tipados, parámetros tipados y getStatus.