Novedad: campañas, automatizaciones y correos del producto en la misma cuenta. Conoce Postal
Iniciar sesión Crear cuenta

De Brevo a Postal, sin llevarte lo que no es correo electrónico

Brevo, antes llamado Sendinblue, reúne varias herramientas. El envío por API y SMTP, las plantillas, los contactos y los webhooks pasan a Postal, con otros formatos. SMS, WhatsApp, CRM y el resto quedan fuera: esta guía muestra qué migra, qué rehaces y qué no tiene par.

Los dos envíos
API y SMTP
Para exportar la base
CSV o API
SMS y WhatsApp se quedan en Brevo
Solo correo electrónico
Campañas y automatizaciones
Rehacer

Visión general

Lo que viene incluido y lo que rehaces

El envío, las plantillas, los contactos y los webhooks pasan a Postal, pero nada ocurre solo: exportas, conviertes y verificas. Los demás productos de Brevo no tienen par en Postal.

Viene por API o archivo

Contactos con los atributos y las listas, quién se dio de baja o está bloqueado, y el HTML de las plantillas transaccionales.

Lo reescribes

La llamada de envío, la configuración de SMTP, las plantillas (los params pasan a ser variables) y los webhooks, que cambian de formato.

Se queda en Brevo

SMS, WhatsApp, CRM de ventas, reuniones y teléfono, notificaciones push, pagos, fidelización y cupones. Postal es una plataforma de correo electrónico.

Equivalencia

Los mismos conceptos, otros nombres

Brevo reúne varias herramientas en una cuenta. Postal se ocupa del correo electrónico: envío, contactos, campañas y automatizaciones. Usa esta tabla como diccionario.

En BrevoEn PostalCómo funciona en Postal
Correo transaccional (POST /v3/smtp/email)POST /emailsEnvío por API, con clave ps_… en el encabezado Authorization.
SMTP relaySMTP de Postalsmtp.postal.so, usuario postal y una clave de API como contraseña.
Plantillas transaccionales (templateId, params)Plantillas (template.id, variables)Variables {{{NOME}}} que solo aceptan texto o números. Editas un borrador y lo publicas.
Senders y dominiosDominiosBasta con que el dominio esté verificado: cualquier dirección de él puede ser el remitente.
Contactos y atributosContactos y propiedadesCada correo electrónico aparece una vez por equipo. Las propiedades tienen tipo: texto, número, sí/no o fecha.
ListasSegmentos estáticosUna lista armada a mano o por importación. Para elecciones de tema del contacto, usa temas.
Carpetas de listasSin equivalenteLos segmentos no se organizan en carpetas.
SegmentosSegmentos dinámicosDefinidos por filtros y actualizados solos. Los filtros los rehaces tú.
Contacto en la lista de bloqueo (blocklist)Dado de baja o lista de supresiónQuien se da de baja no recibe campañas ni automatizaciones. En la supresión, la dirección queda fuera de todos los envíos.
Campañas de correo electrónicoCampañasEnvío a un segmento y, si quieres, solo a quienes están suscritos a un tema.
AutomatizacionesAutomatizacionesUn disparador y pasos: esperar, enviar correo electrónico, condición, cambiar el contacto y llamar a un webhook.
Webhooks transaccionales y de marketingWebhooksUn endpoint por URL, con los eventos que elijas y firma en cada entrega.
1

Haz el inventario en Brevo

Antes de cambiar cualquier cosa, enumera lo que tu sistema usa en Brevo. Cada elemento tiene un lugar en Postal, o no lo tiene, y es mejor descubrirlo ahora.

En BrevoQué anotarDónde queda en Postal
Senders y dominiosDominios autenticados y los remitentes que usa tu sistemaDominios
Claves de API y credenciales SMTPQuién llama a la API (encabezado api-key) y quién usa el SMTPClaves de API
Plantillas transaccionalesEl ID, el nombre y los params de cada unaPlantillas
WebhooksLa URL, los eventos y la forma de autenticar (Brevo acepta hasta 40, sumando marketing y transaccionales)Webhooks
ContactosListas, segmentos, atributos y quién se dio de baja o está en la blocklistAudiencia
Campañas, automatizaciones y formulariosLo que está activo y lo que aún tiene sentidoCampañas, Automatizaciones y Formularios
SMS, WhatsApp, CRM, reuniones, push, pagos y fidelizaciónQué depende de cada unoSin equivalente: decide dónde queda esto
2

Verifica el dominio en Postal

En Dominios, Postal muestra pocos registros para que quien se ocupa del DNS los copie, y los verifica sola hasta por 72 horas. El dominio puede seguir autenticado en Brevo al mismo tiempo: los nombres de los registros son diferentes.

Los registros de Brevo y de Postal lado a lado
En Brevo (ejemplos de la documentación)En Postal
Código de verificaciónTXT en el propio dominio, con valor brevo-code:…No hay: basta con publicar los registros de Postal
DKIMTXT en mail._domainkey, con un valor que empieza por k=rsa;p=TXT en postal._domainkey
DMARCTXT en _dmarc, por ejemplo v=DMARC1; p=none; rua=mailto:…Opcional. El mismo _dmarc sirve para los dos
Return-Path y SPFLa documentación de Brevo que consultamos no los mencionaMX y TXT en postal
Cómo confirmarPor el panel o por la API (/v3/senders/domains/{domínio}); también existe la opción de alojar un archivo o de enviar un correo electrónico con códigoSola, hasta por 72 horas, con el estado de cada registro
  • Copia los valores de la pantalla de tu Brevo: los de la tabla son ejemplos de la documentación, y tu código de verificación es único.
  • Como los nombres son diferentes (mail._domainkey en el ejemplo de Brevo, postal._domainkey en Postal), los dos siguen siendo válidos durante el cambio. Verifica si algún nombre de tu cuenta es igual antes de publicar.
  • Postal avisa por el webhook domain.updated cuando el dominio pasa a verified. Consulta Dominios y DNS.
3

Reescribe la llamada de envío

Postal no acepta el formato de Brevo. La llamada pasa a ser POST /emails, con la clave en Authorization: Bearer en lugar del encabezado api-key, y los campos cambian de nombre. Abajo, el mismo correo electrónico en los dos formatos.

Antes: Brevo, POST /v3/smtp/email
POST https://api.brevo.com/v3/smtp/email
api-key: <clave de Brevo>
Content-Type: application/json

{
  "sender": { "name": "Aurora Cosméticos", "email": "[email protected]" },
  "to": [{ "email": "[email protected]", "name": "Ana" }],
  "subject": "Tu pedido #10482 salió para la entrega",
  "htmlContent": "<p>El pedido <b>#10482</b> está en camino.</p>",
  "textContent": "El pedido #10482 está en camino.",
  "tags": ["entrega"]
}
201{ "messageId": "<…>" }
Después: Postal, POST /emails
POST https://api.postal.so/emails
Authorization: Bearer ps_sua_chave
Idempotency-Key: pedido-10482-saiu
Content-Type: application/json

{
  "from": "Aurora Cosméticos <[email protected]>",
  "to": ["Ana <[email protected]>"],
  "subject": "Tu pedido #10482 salió para la entrega",
  "html": "<p>El pedido <b>#10482</b> está en camino.</p>",
  "text": "El pedido #10482 está en camino.",
  "tags": [{ "name": "entrega" }]
}
200{ "id": "019a1b2c-4d5e-7f60-8a9b-0c1d2e3f4a5b" }
POST /v3/smtp/email y POST /emails, campo por campo
Campo en BrevoEn PostalQué cambia
sender: {email, name} o {id}from: texto Nome <email>No hay ID de remitente. El dominio debe estar verificado (y ser el de la clave, si esta es restringida).
to: lista de {email, name}, hasta 2.000 por solicitudto: texto o lista de hasta 50, en el formato Nome <email>Una lista en Postal es un único correo electrónico, en el que todos se ven. Para un correo por persona, usa el lote.
messageVersions (hasta 99 destinatarios por versión)POST /emails/batch: lista de hasta 100 correos electrónicos, cada uno con su propio toCada elemento tiene su asunto, contenido o plantilla. El lote se valida antes: o entran todos en la cola, o ninguno. No acepta adjuntos ni scheduled_at y depende del plan.
cc, bcccc, bccTexto o lista.
replyTo: {email, name}reply_to: texto o lista
subject, htmlContent, textContentsubject, html, textSin text, el html es obligatorio. Manda los dos cuando puedas.
templateId y paramstemplate: {id, variables}El ID numérico pasa a ser el ID o el alias de la plantilla. No mandes html junto. Consulta el paso de las plantillas.
headersheadersBrevo acepta solo encabezados fuera del estándar. En Postal, algunos nombres no se pueden cambiar: From, To, Cc, Bcc, Subject, Reply-To, Sender, Date, Message-ID, Return-Path, MIME-Version, Content-Type, Content-Transfer-Encoding y DKIM-Signature.
tags: lista de textostags: lista de {name, value} (hasta 50)El nombre y el valor solo aceptan letras ASCII, números, _ y -: “Promoção de Natal” pasa a ser promocao-de-natal. El valor es opcional.
attachment: {url} o {content, name}attachments: {path} o {content, filename}url pasa a path y name pasa a filename. Hasta 40 MB en total, no vale en el lote y depende del plan.
scheduledAt, en UTC (la entrega puede retrasarse hasta 5 minutos)scheduled_at, en ISO 8601En el futuro y a un máximo de 30 días. Se puede reprogramar (PATCH /emails/{id}) y cancelar (POST /emails/{id}/cancel). Depende del plan.
batchIdSin equivalenteCancela cada correo electrónico programado, uno por uno.
Respuesta 201 con messageIdRespuesta 200 con idGuarda el id: es el que aparece en los webhooks (data.email_id) y en GET /emails/{id}.
Errores: {code, message}Errores: {statusCode, name, message}Consulta Errores.
Hasta 1.000 solicitudes por segundo (rango general de los planes)Por plan: Gratis 5, Profesional 10, Escala 20 y Empresarial 50En el lote, 100 correos electrónicos cuentan como una solicitud. Consulta Límites.
  • Sin templateId, Brevo exige sender, subject y htmlContent. Postal exige from, subject y html o text.
  • Postal añade el encabezado Idempotency-Key: repetir la llamada con la misma clave y el mismo cuerpo, en un plazo de 24 horas, devuelve la respuesta de la primera y no envía de nuevo. Consulta Idempotencia.
  • La documentación de Postal no trata la IP dedicada. Si usas el campo sender.ip en Brevo, habla con nosotros por el formulario de contacto antes de migrar.
  • ¿Prefieres un SDK? Los de Postal (Node.js, PHP y Laravel) usan esta misma API. Consulta SDKs y CLI y la referencia de correos.
4

Si envías por SMTP, cambia solo la conexión

Los sistemas que hablan SMTP, como WordPress, los ERP y las plataformas de tienda, cambian cuatro campos: servidor, puerto, usuario y contraseña. En Brevo la contraseña es una clave SMTP, y no la clave de API. En Postal es una clave de API.

.env de Laravel
- MAIL_HOST=smtp-relay.brevo.com- MAIL_PORT=587- MAIL_USERNAME=<login SMTP do Brevo>- MAIL_PASSWORD=<chave SMTP do Brevo>+ MAIL_SCHEME=smtps+ MAIL_HOST=smtp.postal.so+ MAIL_PORT=465+ MAIL_USERNAME=postal+ MAIL_PASSWORD=ps_sua_chave
Configuración de SMTP en ambos lados
SMTP de BrevoSMTP de Postal
Servidorsmtp-relay.brevo.comsmtp.postal.so
Puertos587 o 2525 (la documentación indica dejar el cifrado vacío) y 465 (SSL/TLS)465 (TLS directo, recomendado) o 587 (STARTTLS). Si la red bloquea, 2465 (TLS) o 2587 (STARTTLS)
UsuarioEl login SMTP de la pestaña SMTP, en SMTP y APIpostal
ContraseñaLa clave SMTP (la documentación avisa que no es la clave de API)Una clave de API (ps_…). Basta una clave de solo envío
Envío en loteEl relay no hace lotes: la documentación indica usar la APIHasta 50 destinatarios por mensaje. Para lotes, la API
  • En Postal, la autenticación (AUTH PLAIN o AUTH LOGIN) viene siempre después de TLS.
  • El SMTP de Postal no tiene etiquetas, programación ni plantillas: para eso, usa la API. Si tu sistema manda encabezados propios de Brevo para esas funciones, Postal no los interpreta y siguen como encabezados comunes.
  • Los envíos por SMTP siguen las mismas reglas de la API (dominio verificado, cuotas y supresión) y aparecen en Correos y Registros. Consulta la guía de SMTP.
5

Recrea las plantillas transaccionales

Postal no convierte plantillas de otra plataforma, pero el HTML viene por la API de Brevo. El script de abajo lista las plantillas activas, cambia {{params.nome}} por {{{nome}}} y crea cada una como plantilla, con el alias brevo-<id>. Es un punto de partida: revisa el resultado antes de publicar la tuya.

Node.js: de las plantillas de Brevo a las plantillas de Postal
const brevoHeaders = { 'api-key': process.env.BREVO_API_KEY }
const postalHeaders = {
  Authorization: `Bearer ${process.env.POSTAL_API_KEY}`,
  'Content-Type': 'application/json',
}

// {{params.nome}} de Brevo pasa a ser {{{nome}}} en Postal
const convert = (text) => text.replace(/\{\{\s*params\.(\w+)\s*\}\}/g, '{{{$1}}}')

const url = 'https://api.brevo.com/v3/smtp/templates?templateStatus=true&limit=100'
const response = await fetch(url, { headers: brevoHeaders })
const { templates } = await response.json()

for (const template of templates) {
  const created = await fetch('https://api.postal.so/templates', {
    method: 'POST',
    headers: postalHeaders,
    body: JSON.stringify({
      name: template.name,
      alias: `brevo-${template.id}`,
      subject: convert(template.subject),
      html: convert(template.htmlContent),
    }),
  })
  if (!created.ok) throw new Error(await created.text())

  const { id } = await created.json()
  await fetch(`https://api.postal.so/templates/${id}/publish`, { method: 'POST', headers: postalHeaders })
}
Variables de las plantillas
En BrevoEn PostalObservación
{{params.codigo}}{{{codigo}}}El valor viene en template.variables. En el HTML, los valores se escapan.
{{ contact.FIRSTNAME }} (dato del contacto){{{FIRST_NAME}}} o {{{contact.chave}}}, solo en campañas y automatizacionesEn un envío por POST /emails, manda el valor en variables.
{% if … %} e {% for … %}Sin equivalenteLas plantillas de Postal solo sustituyen variables. Resuelve las condiciones y las listas en tu sistema y manda el resultado ya listo.
Enlace de baja de Brevo{{{POSTAL_UNSUBSCRIBE_URL}}}En campañas, sin la variable Postal añade un pie de baja al final del correo electrónico.
  • Brevo solo acepta params en las plantillas del “nuevo lenguaje de plantillas” (New Template Language). Las plantillas más antiguas deben revisarse a mano.
  • Los valores de params que son listas u objetos no pasan: en Postal, cada variable es texto o número, y una variable sin valor y sin valor predeterminado devuelve 422. Declara las opcionales con fallback_value.
  • La respuesta de Brevo trae el remitente (sender) de cada plantilla. En Postal, viene de from en el envío, o del remitente predeterminado que guardes en la plantilla.
  • El envío usa siempre la última versión publicada. Consulta la referencia de plantillas; el plan define cuántas plantillas tiene el equipo.
6

Recrea los webhooks y cambia la autenticación

Los eventos principales existen en ambos lados, con otros nombres y otro cuerpo. En Brevo, la documentación que consultamos no describe firma: autentica con usuario y contraseña en la URL, token Bearer, encabezados propios o lista de IP. En Postal, cada entrega viene firmada con el secreto del endpoint.

Eventos: qué corresponde a qué
Evento de Brevo (event)Evento de PostalObservación
requestemail.sentAproximado: Postal avisa cuando entregó el correo electrónico al proveedor de envío.
deliveredemail.deliveredEl servidor del destinatario aceptó el mensaje.
deferredemail.delivery_delayedLos reintentos ocurren solos.
soft_bounceemail.bounceddata.bounce.type es Transient.
hard_bounceemail.bounceddata.bounce.type es Permanent, y la dirección entra en la lista de supresión.
invalid_email, erroremail.failedAproximado: failed.reason trae el motivo.
blockedemail.suppressedAproximado: Postal lo usa cuando el destinatario estaba en la lista de supresión. Compruébalo con un envío de prueba.
spamemail.complainedLa dirección entra en la lista de supresión.
opened, unique_openedemail.openedSolo con el seguimiento de aperturas activado en el dominio. La documentación de Postal no separa la primera apertura de las siguientes: si necesitas eso, cuenta por el email_id.
clickemail.clickeddata.click trae link, ipAddress, userAgent y timestamp. Solo con el seguimiento de clics activado.
unsubscribedcontact.updatedLa baja de un contacto de marketing genera contact.updated.
proxy_open, unique_proxy_openSin equivalentePostal no tiene un evento para la apertura por proxy.
Marketing: contact_updated, contact_deletedcontact.updated, contact.deleted
Marketing: list_additionSin evento propioLos segmentos estáticos no generan evento.
Webhooks: formato, autenticación e intentos
En BrevoEn PostalObservación
Campos sueltos en el cuerpo: event, email, message-id, ts_event…{type, created_at, data}, con el correo electrónico dentro de dataSi activaste webhooks por lotes (batched, hasta 500 eventos por envío, cada 5 minutos), tu código recibe varios por solicitud. Postal manda un evento por solicitud.
message-id, el identificador del correo electrónico en el eventodata.email_idEs el id devuelto por POST /emails: guárdalo para vincular el evento con el envío.
email: una direccióndata.to: una lista
ts_event en UTC; date en CET/CESTcreated_at en ISO 8601
tags y tagdata.tags: objeto {nome: valor}
reasondata.bounce.message y data.failed.reason
X-Mailin-custom, devuelto en el eventoSin equivalenteGuarda tus datos en la base de datos, junto con el id del correo electrónico, o usa etiquetas.
Sin firma documentada: usuario y contraseña en la URL, token Bearer, encabezados propios o lista de IPEstándar Standard Webhooks, HMAC-SHA256: webhook-id, webhook-timestamp y webhook-signatureEl secreto (whsec_…) es de cada endpoint. Consulta la verificación de la firma.
4 reintentos (tras 10 minutos, 1 hora, 2 horas y 8 horas). Una respuesta 4xx (salvo 429) o 5xx termina y descarta el evento8 intentos en unas 27 horas. Cualquier respuesta que no sea 2xx cuenta como fallo y genera un nuevo intentoTodos con el mismo webhook-id: úsalo para descartar duplicados. Reenvío manual por el panel o por POST /webhooks/{id}/events/{event_id}/replay.
Hasta 40 webhooks, sumando marketing y transaccionalesEl número de endpoints depende del planLa URL debe ser HTTPS y pública. Eliges los eventos de cada endpoint.
  • Crea el endpoint en Webhooks (panel o POST /webhooks) y guarda el signing_secret. Manda un evento de prueba desde el panel antes de pasar el tráfico.
  • Las direcciones de prueba ([email protected], [email protected] y otras) generan webhooks reales, sin usar la cuota. Dependen del plan.
  • Quita los webhooks de Brevo solo después de pasar todo el tráfico: los correos electrónicos que aún salen por allí siguen generando eventos.
7

Lleva a quienes están bloqueados o pidieron salir

Haz esto antes de importar contactos: una dirección que está en la lista de supresión nunca se convierte en contacto. Brevo lista, por API, los contactos bloqueados o dados de baja de los correos electrónicos transaccionales, con el motivo de cada uno.

Rebote y spamSuprimir

Motivos hardBounce y contactFlaggedAsSpam en la lista de bloqueados.

Ponlos en la lista de supresión.

Dados de baja y bloqueadosDecidir

Motivos unsubscribedViaMA, unsubscribedViaEmail, unsubscribedViaApi y adminBlocked.

Suprime, si la persona no debe recibir ni los correos electrónicos del sistema. Si solo se detuvo el marketing, impórtala como dada de baja.

SuscritosImportar

Contactos que aceptaron recibir.

Impórtalos como contactos, en el paso siguiente.

Solo SMS o WhatsAppNo importar

Contactos que tienen número y no tienen correo electrónico.

Déjalos fuera: Postal no tiene esos canales.

Node.js: de los bloqueados de Brevo a la lista de supresión de Postal
const reasonsToSuppress = new Set(['hardBounce', 'contactFlaggedAsSpam'])
const emails = []

for (let offset = 0; ; offset += 100) {
  const url = `https://api.brevo.com/v3/smtp/blockedContacts?limit=100&offset=${offset}`
  const response = await fetch(url, { headers: { 'api-key': process.env.BREVO_API_KEY } })
  const { contacts = [] } = await response.json()
  if (contacts.length === 0) break

  for (const contact of contacts) {
    if (reasonsToSuppress.has(contact.reason?.code)) emails.push(contact.email.toLowerCase())
  }
}

for (let i = 0; i < emails.length; i += 100) {
  const response = await fetch('https://api.postal.so/suppressions/batch/add', {
    method: 'POST',
    headers: {
      Authorization: `Bearer ${process.env.POSTAL_API_KEY}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ emails: emails.slice(i, i + 100) }),
  })
  if (!response.ok) throw new Error(await response.text())
  await new Promise((resolve) => setTimeout(resolve, 250)) // respeita o limite do plano
}
201Cada lote acepta hasta 100 direcciones
  • La ruta es GET /v3/smtp/blockedContacts, con hasta 100 por página. Cada elemento trae email, blockedAt y reason.code. El script lleva solo los dos motivos de entrega y deja los demás para que tú decidas.
  • En Postal, las direcciones entran con el origen manual: la diferencia entre rebote y queja no se guarda. La clave debe ser de acceso total. Consulta la referencia de supresiones.
  • Brevo también tiene una lista de dominios bloqueados. La lista de supresión de Postal guarda direcciones, y no dominios enteros: si necesitas eso, rechaza el dominio en tu formulario o en tu sistema.
8

Exporta la base de Brevo e impórtala en Postal

El panel de Brevo exporta contactos en CSV, y la API también. En CRM, Contacts, selecciona los contactos y usa More actions, Export, eligiendo los atributos. Por la API, la solicitud de abajo genera el archivo y avisa a tu notifyUrl cuando esté listo.

Pedir la exportación de una lista
POST https://api.brevo.com/v3/contacts/export
api-key: <chave do Brevo>
Content-Type: application/json

{
  "customContactFilter": { "actionForContacts": "subscribed", "listId": 12 },
  "exportAttributes": ["FIRSTNAME", "LASTNAME"],
  "notifyUrl": "https://exemplo.com.br/hooks/brevo-export"
}
202{ "processId": 3912 }
  • En actionForContacts, la API acepta allContacts, subscribed, unsubscribed y unsubscribedPerList. También hay que indicar listId, segmentId, modifiedSince o createdSince (fecha completa, con zona horaria). Exporta suscritos y dados de baja en archivos separados.
  • Sin CSV, GET /v3/contacts (hasta 1.000 por página) y GET /v3/contacts/lists/{id}/contacts (hasta 500) devuelven JSON con attributes, listIds, listUnsubscribed y emailBlacklisted.
  • Dados de baja: en su archivo, deja una columna Dado de baja con sim en todas las filas y apunta esa columna al campo Dado de baja (sí/no). Quien tenía emailBlacklisted verdadero entra aquí, y nunca como suscrito.
  • Listas: exporta una lista por archivo e importa cada uno eligiendo el segmento. Solo los segmentos estáticos reciben contactos importados. Quien salió de una sola lista (listUnsubscribed) merece cuidado: si la lista pasó a ser un tema, registra la elección opt_out de esas personas con PATCH /contacts/{id}/topics.
  • Crea antes las Propiedades de los atributos que quieres mantener: la importación no crea propiedades nuevas. Si usas un ID propio (ext_id) y viene en el archivo, apúntalo al campo de ID externo.
  • Deja desactivada la opción Disparar automatizaciones. Los contactos que ya existen se actualizan por el correo electrónico, y cada archivo puede tener hasta 20 MB. El límite de contactos del plan está en Precios: en Gratis son 1.000, en Profesional 5.000 y en Escala 50.000.
  • Antes de enviar, pasa la lista por la Verificación de correos.
9

Rehaz campañas, automatizaciones y formularios

Las campañas y automatizaciones no pasan solas. No encontramos en la documentación de Brevo una exportación de ellas a otra plataforma, así que trata cada una como nueva y aprovecha para revisar lo que aún tiene sentido.

Qué rehacer
En BrevoEn PostalQué hacer
Campañas de correo electrónicoCampañasCopia el HTML a una plantilla o pégalo en la campaña. Elige el segmento (y, si quieres, el tema), el remitente de un dominio verificado y el asunto. Las campañas ya enviadas no se importan.
AutomatizacionesAutomatizacionesVuelve a armarla en el editor de flujos: un disparador y pasos de esperar, enviar correo electrónico, condición, cambiar el contacto y llamar a un webhook. Consulta Automatizaciones.
SegmentosSegmentos dinámicosRehaz los filtros. En el archivo vienen solo los contactos.
Formularios de suscripciónFormulariosRecréalo, activa la confirmación por correo electrónico (double opt-in) y cambia la dirección o el código en tu sitio. Consulta Formularios.
Informes e historialNo vieneExporta lo que quieras conservar antes de cerrar la cuenta. Postal guarda correos electrónicos, eventos y registros por 30 días.
  • Las importaciones no inician automatizaciones, a menos que actives esa opción. Revisa quién entraría antes de activar.
  • Cada plan tiene un límite de ejecuciones de automatizaciones por mes.
10

Revisa lo que no tiene equivalente y pasa el tráfico

Pasa un flujo a la vez, con Brevo aún activo. Empieza por las direcciones de prueba y por ti mismo, compara entregas y rebotes en los primeros días y solo entonces pasa el resto.

Dominio verificadoPrueba en [email protected]Un flujo por PostalTodo el tráficoApagar Brevo
Lo que no tiene equivalente, y cómo sortearlo
En BrevoQué hacer en Postal
SMS y WhatsAppSin equivalente. Postal es una plataforma de correo electrónico.
CRM de ventas, reuniones y teléfono, notificaciones push, pagos, fidelización y cuponesSin equivalente. Sigue en Brevo o usa otra herramienta.
Plantillas con condiciones y buclesResuélvelo en tu sistema y manda el HTML ya listo, o variables simples.
IP dedicada (sender.ip)La documentación de Postal no trata este tema.
batchIdCancela cada correo electrónico programado con POST /emails/{id}/cancel.
Lista de dominios bloqueadosSin equivalente: la supresión guarda direcciones.
Webhooks autenticados por usuario y contraseña en la URL, token Bearer o encabezados propiosLa protección es la firma de cada entrega.
Eventos de apertura por proxySin evento propio.

Antes de cambiar la clave

  • El dominio está verificado en Postal y la clave de API está creada (solo envío y restringida al dominio, en los sistemas que solo envían).
  • La llamada de envío fue reescrita y probada con una dirección de prueba, y tu código guarda el id de cada correo electrónico.
  • Las plantillas fueron recreadas y publicadas, y las que usaban condiciones o bucles se resolvieron en el sistema.
  • El SMTP apunta a smtp.postal.so con una clave de API como contraseña.
  • El webhook fue creado, la firma se verifica y llegó un evento de prueba.
  • Los bloqueados por rebote y spam están en la lista de supresión, antes de la importación de contactos.
  • Quienes estaban dados de baja entraron como dados de baja, y las automatizaciones quedaron desactivadas en la importación.
  • Tu código guarda de qué proveedor salió cada correo electrónico, y los rebotes se revisaron en los primeros días.
  • Decidiste dónde quedan SMS, WhatsApp y el CRM, si los usabas.

Preguntas frecuentes

¿Necesito mantener Brevo durante la migración?

Sí, hasta terminar: cambiar el envío, llevar los contactos, recrear campañas y automatizaciones y ver llegar los eventos de los últimos correos electrónicos que salieron por allí. Si usas SMS, WhatsApp o el CRM, se quedan en Brevo, porque Postal no tiene esos productos.

¿Puedo mantener el dominio autenticado en los dos?

Sí. Los registros tienen nombres diferentes (Postal usa el selector postal en el DKIM y el subdominio postal en el Return-Path), así que los dos quedan verificados durante el cambio.

¿Mis plantillas con condiciones y listas funcionan en Postal?

No del mismo modo. Las plantillas de Postal solo sustituyen variables de texto o número. Resuelve las condiciones y las listas en tu sistema, arma el HTML final y mándalo en html, o pasa solo los valores ya listos en variables.

Brevo era Sendinblue. ¿Esta guía me sirve?

Sí. La guía usa los nombres y las rutas de la documentación actual de Brevo (api.brevo.com/v3). Si tu código aún usa el nombre antiguo, comprueba en la documentación de Brevo a qué dirección llama.

¿Quieres probar Postal?

Crea tu cuenta y empieza con el plan Gratis.