Do Brevo para a Postal, sem levar o que não é e-mail
O Brevo, antes chamado Sendinblue, junta várias ferramentas. O envio por API e SMTP, os modelos, os contatos e os webhooks passam para a Postal, com outros formatos. SMS, WhatsApp, CRM e o resto ficam de fora: este guia mostra o que migra, o que você refaz e o que não tem par.
- Os dois envios
- API e SMTP
- Para exportar a base
- CSV ou API
- SMS e WhatsApp ficam no Brevo
- Só e-mail
- Campanhas e automações
- Refazer
Visão geral
O que vem junto e o que você refaz
O envio, os modelos, os contatos e os webhooks passam para a Postal, mas nada acontece sozinho: você exporta, converte e confere. Os outros produtos do Brevo não têm par na Postal.
Vem por API ou arquivo
Contatos com os atributos e as listas, quem está descadastrado ou bloqueado, e o HTML dos modelos transacionais.
Você reescreve
A chamada de envio, a configuração de SMTP, os modelos (params viram variáveis) e os webhooks, que mudam de formato.
Fica no Brevo
SMS, WhatsApp, CRM de vendas, reuniões e telefone, notificações push, pagamentos, fidelidade e cupons. A Postal é uma plataforma de e-mail.
Equivalência
Os mesmos conceitos, outros nomes
O Brevo junta várias ferramentas numa conta. A Postal cuida do e-mail: envio, contatos, campanhas e automações. Use esta tabela como dicionário.
| No Brevo | Na Postal | Como funciona na Postal |
|---|---|---|
E-mail transacional (POST /v3/smtp/email) | POST /emails | Envio por API, com chave ps_… no cabeçalho Authorization. |
| SMTP relay | SMTP da Postal | smtp.postal.so, usuário postal e uma chave de API como senha. |
Modelos transacionais (templateId, params) | Templates (template.id, variables) | Variáveis {{{NOME}}} que só aceitam texto ou número. Você edita um rascunho e publica. |
| Senders e domínios | Domínios | Basta o domínio estar verificado: qualquer endereço dele pode ser o remetente. |
| Contatos e atributos | Contatos e propriedades | Cada e-mail aparece uma vez por time. As propriedades têm tipo: texto, número, sim/não ou data. |
| Listas | Segmentos estáticos | Uma lista montada à mão ou por importação. Para escolhas de assunto do contato, use tópicos. |
| Pastas de listas | Sem equivalente | Os segmentos não ficam em pastas. |
| Segmentos | Segmentos dinâmicos | Definidos por filtros e atualizados sozinhos. Os filtros você refaz. |
| Contato na lista de bloqueio (blocklist) | Descadastrado ou lista de supressão | Descadastrado não recebe campanhas nem automações. Na supressão, o endereço sai de todos os envios. |
| Campanhas de e-mail | Campanhas | Envio para um segmento, e se quiser só para quem está inscrito num tópico. |
| Automações | Automações | Um gatilho e passos: esperar, enviar e-mail, condição, mudar o contato e chamar um webhook. |
| Webhooks transacionais e de marketing | Webhooks | Um endpoint por URL, com os eventos que você escolher e assinatura em cada entrega. |
Faça o inventário no Brevo
Antes de mudar qualquer coisa, liste o que o seu sistema usa no Brevo. Cada item tem um lugar na Postal, ou não tem, e é melhor descobrir isso agora.
| No Brevo | O que anotar | Onde fica na Postal |
|---|---|---|
| Senders e domínios | Domínios autenticados e os remetentes que o seu sistema usa | Domínios |
| Chaves de API e credenciais SMTP | Quem chama a API (cabeçalho api-key) e quem usa o SMTP | Chaves de API |
| Modelos transacionais | O ID, o nome e os params de cada um | Templates |
| Webhooks | A URL, os eventos e o jeito de autenticar (o Brevo aceita até 40, somando marketing e transacionais) | Webhooks |
| Contatos | Listas, segmentos, atributos e quem está descadastrado ou na blocklist | Audiência |
| Campanhas, automações e formulários | O que está no ar e o que ainda faz sentido | Campanhas, Automações e Formulários |
| SMS, WhatsApp, CRM, reuniões, push, pagamentos e fidelidade | O que depende de cada um | Sem equivalente: decida onde isso fica |
Verifique o domínio na Postal
Em Domínios, a Postal mostra poucos registros para quem cuida do DNS copiar e confere sozinha por até 72 horas. O domínio pode continuar autenticado no Brevo ao mesmo tempo: os nomes dos registros são diferentes.
| No Brevo (exemplos da documentação) | Na Postal | |
|---|---|---|
| Código de verificação | TXT no próprio domínio, com valor brevo-code:… | Não tem: basta publicar os registros da Postal |
| DKIM | TXT em mail._domainkey, com valor que começa em k=rsa;p= | TXT em postal._domainkey |
| DMARC | TXT em _dmarc, por exemplo v=DMARC1; p=none; rua=mailto:… | Opcional. O mesmo _dmarc vale para os dois |
| Return-Path e SPF | A documentação consultada do Brevo não os cita | MX e TXT em postal |
| Como confirmar | Pelo painel ou pela API (/v3/senders/domains/{domínio}); há ainda a opção de hospedar um arquivo ou de enviar um e-mail com código | Sozinha, por até 72 horas, com o status de cada registro |
- Copie os valores da tela do seu Brevo: os da tabela são exemplos da documentação, e o seu código de verificação é único.
- Como os nomes são diferentes (
mail._domainkeyno exemplo do Brevo,postal._domainkeyna Postal), os dois ficam válidos durante a virada. Confira se algum nome da sua conta é igual antes de publicar. - A Postal avisa pelo webhook
domain.updatedquando o domínio viraverified. Veja Domínios e DNS.
Reescreva a chamada de envio
A Postal não aceita o formato do Brevo. A chamada passa a ser POST /emails, com a chave em Authorization: Bearer no lugar do cabeçalho api-key, e os campos mudam de nome. Abaixo, o mesmo e-mail nos dois formatos.
POST https://api.brevo.com/v3/smtp/email
api-key: <chave do Brevo>
Content-Type: application/json
{
"sender": { "name": "Aurora Cosméticos", "email": "[email protected]" },
"to": [{ "email": "[email protected]", "name": "Ana" }],
"subject": "Seu pedido #10482 saiu para entrega",
"htmlContent": "<p>O pedido <b>#10482</b> está a caminho.</p>",
"textContent": "O pedido #10482 está a caminho.",
"tags": ["entrega"]
}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": "Seu pedido #10482 saiu para entrega",
"html": "<p>O pedido <b>#10482</b> está a caminho.</p>",
"text": "O pedido #10482 está a caminho.",
"tags": [{ "name": "entrega" }]
}| Campo no Brevo | Na Postal | O que muda |
|---|---|---|
sender: {email, name} ou {id} | from: texto Nome <email> | Não há ID de remetente. O domínio precisa estar verificado (e ser o da chave, se ela for restrita). |
to: lista de {email, name}, até 2.000 por requisição | to: texto ou lista de até 50, no formato Nome <email> | Uma lista na Postal é um único e-mail, em que todos se veem. Para um e-mail por pessoa, use o lote. |
messageVersions (até 99 destinatários por versão) | POST /emails/batch: lista de até 100 e-mails, cada um com o seu to | Cada item tem o seu assunto, conteúdo ou template. O lote é validado antes: ou todos entram na fila, ou nenhum. Não aceita anexos nem scheduled_at e depende do plano. |
cc, bcc | cc, bcc | Texto ou lista. |
replyTo: {email, name} | reply_to: texto ou lista | |
subject, htmlContent, textContent | subject, html, text | Sem text, o html é obrigatório. Mande os dois quando puder. |
templateId e params | template: {id, variables} | O ID numérico vira o ID ou o alias do template. Não mande html junto. Veja o passo dos modelos. |
headers | headers | O Brevo aceita só cabeçalhos fora do padrão. Na Postal, alguns nomes não podem ser trocados: From, To, Cc, Bcc, Subject, Reply-To, Sender, Date, Message-ID, Return-Path, MIME-Version, Content-Type, Content-Transfer-Encoding e DKIM-Signature. |
tags: lista de textos | tags: lista de {name, value} (até 50) | Nome e valor só aceitam letras ASCII, números, _ e -: “Promoção de Natal” vira promocao-de-natal. O valor é opcional. |
attachment: {url} ou {content, name} | attachments: {path} ou {content, filename} | url vira path e name vira filename. Até 40 MB no total, não vale no lote e depende do plano. |
scheduledAt, em UTC (a entrega pode atrasar até 5 minutos) | scheduled_at, em ISO 8601 | No futuro e a no máximo 30 dias. Dá para reagendar (PATCH /emails/{id}) e cancelar (POST /emails/{id}/cancel). Depende do plano. |
batchId | Sem equivalente | Cancele cada e-mail agendado, um a um. |
Resposta 201 com messageId | Resposta 200 com id | Guarde o id: é ele que aparece nos webhooks (data.email_id) e em GET /emails/{id}. |
Erros: {code, message} | Erros: {statusCode, name, message} | Veja Erros. |
| Até 1.000 requisições por segundo (faixa geral dos planos) | Por plano: Grátis 5, Profissional 10, Escala 20 e Empresarial 50 | No lote, 100 e-mails contam como uma requisição. Veja Limites. |
- Sem
templateId, o Brevo exigesender,subjectehtmlContent. A Postal exigefrom,subjectehtmloutext. - A Postal acrescenta o cabeçalho
Idempotency-Key: repetir a chamada com a mesma chave e o mesmo corpo, em até 24 horas, devolve a resposta da primeira e não envia de novo. Veja Idempotência. - A documentação da Postal não trata de IP dedicado. Se você usa o campo
sender.ipno Brevo, fale com a gente pelo formulário de contato antes de migrar. - Prefere um SDK? Os da Postal (Node.js, PHP e Laravel) usam esta mesma API. Veja SDKs e CLI e a referência de e-mails.
Se você envia por SMTP, troque só a conexão
Sistemas que falam SMTP, como WordPress, ERPs e plataformas de loja, mudam quatro campos: servidor, porta, usuário e senha. No Brevo a senha é uma chave SMTP, e não a chave de API. Na Postal é uma chave de API.
- 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| SMTP do Brevo | SMTP da Postal | |
|---|---|---|
| Servidor | smtp-relay.brevo.com | smtp.postal.so |
| Portas | 587 ou 2525 (a documentação manda deixar a criptografia vazia) e 465 (SSL/TLS) | 465 (TLS direto, recomendada) ou 587 (STARTTLS). Se a rede bloquear, 2465 (TLS) ou 2587 (STARTTLS) |
| Usuário | O login SMTP da aba SMTP, em SMTP e API | postal |
| Senha | A chave SMTP (a documentação avisa que não é a chave de API) | Uma chave de API (ps_…). Uma chave só de envio basta |
| Envio em lote | O relay não faz lote: a documentação manda usar a API | Até 50 destinatários por mensagem. Para lote, a API |
- Na Postal, a autenticação (
AUTH PLAINouAUTH LOGIN) vem sempre depois do TLS. - O SMTP da Postal não tem tags, agendamento nem templates: para isso, use a API. Se o seu sistema manda cabeçalhos próprios do Brevo para essas funções, a Postal não os interpreta e eles seguem como cabeçalhos comuns.
- Os envios por SMTP seguem as mesmas regras da API (domínio verificado, cotas e supressão) e aparecem em E-mails e Logs. Veja o guia de SMTP.
Recrie os modelos transacionais
A Postal não converte modelos de outra plataforma, mas o HTML vem pela API do Brevo. O script abaixo lista os modelos ativos, troca {{params.nome}} por {{{nome}}} e cria cada um como template, com o alias brevo-<id>. É um ponto de partida: revise o resultado antes de publicar o seu.
const brevoHeaders = { 'api-key': process.env.BREVO_API_KEY }
const postalHeaders = {
Authorization: `Bearer ${process.env.POSTAL_API_KEY}`,
'Content-Type': 'application/json',
}
// {{params.nome}} do Brevo vira {{{nome}}} na 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 })
}| No Brevo | Na Postal | Observação |
|---|---|---|
{{params.codigo}} | {{{codigo}}} | O valor vem em template.variables. No HTML, os valores são escapados. |
{{ contact.FIRSTNAME }} (dado do contato) | {{{FIRST_NAME}}} ou {{{contact.chave}}}, só em campanhas e automações | Em um envio por POST /emails, mande o valor em variables. |
{% if … %} e {% for … %} | Sem equivalente | Os templates da Postal só substituem variáveis. Resolva as condições e as listas no seu sistema e mande o resultado pronto. |
| Link de descadastro do Brevo | {{{POSTAL_UNSUBSCRIBE_URL}}} | Em campanhas, sem a variável a Postal acrescenta um rodapé de descadastro no fim do e-mail. |
- O Brevo só aceita
paramsnos modelos da “nova linguagem de modelos” (New Template Language). Os modelos mais antigos precisam ser revisados à mão. - Valores de
paramsque são listas ou objetos não passam: na Postal, cada variável é texto ou número, e uma variável sem valor e sem valor padrão devolve422. Declare as opcionais comfallback_value. - A resposta do Brevo traz o remetente (
sender) de cada modelo. Na Postal, ele vem defromno envio, ou do remetente padrão que você guardar no template. - O envio usa sempre a última versão publicada. Veja a referência de templates; o plano define quantos templates o time tem.
Recrie os webhooks e troque a autenticação
Os eventos principais existem nos dois lados, com outros nomes e outro corpo. No Brevo, a documentação consultada não descreve assinatura: ele autentica com usuário e senha na URL, token Bearer, cabeçalhos próprios ou lista de IPs. Na Postal, cada entrega vem assinada com o segredo do endpoint.
Evento do Brevo (event) | Evento da Postal | Observação |
|---|---|---|
request | email.sent | Aproximado: a Postal avisa quando entregou o e-mail ao provedor de envio. |
delivered | email.delivered | O servidor do destinatário aceitou a mensagem. |
deferred | email.delivery_delayed | As novas tentativas acontecem sozinhas. |
soft_bounce | email.bounced | data.bounce.type é Transient. |
hard_bounce | email.bounced | data.bounce.type é Permanent, e o endereço entra na lista de supressão. |
invalid_email, error | email.failed | Aproximado: failed.reason traz o motivo. |
blocked | email.suppressed | Aproximado: a Postal usa quando o destinatário estava na lista de supressão. Confira com um envio de teste. |
spam | email.complained | O endereço entra na lista de supressão. |
opened, unique_opened | email.opened | Só com o rastreamento de aberturas ligado no domínio. A documentação da Postal não separa a primeira abertura das seguintes: se precisa disso, conte pelo email_id. |
click | email.clicked | data.click traz link, ipAddress, userAgent e timestamp. Só com o rastreamento de cliques ligado. |
unsubscribed | contact.updated | O descadastro de um contato de marketing gera contact.updated. |
proxy_open, unique_proxy_open | Sem equivalente | A Postal não tem um evento para abertura por proxy. |
Marketing: contact_updated, contact_deleted | contact.updated, contact.deleted | |
Marketing: list_addition | Sem evento próprio | Segmentos estáticos não geram evento. |
| No Brevo | Na Postal | Observação |
|---|---|---|
Campos soltos no corpo: event, email, message-id, ts_event… | {type, created_at, data}, com o e-mail dentro de data | Se você ligou webhooks em lote (batched, até 500 eventos por envio, a cada 5 minutos), o seu código recebe vários por requisição. A Postal manda um evento por requisição. |
message-id, o identificador do e-mail no evento | data.email_id | É o id devolvido por POST /emails: guarde-o para ligar o evento ao envio. |
email: um endereço | data.to: uma lista | |
ts_event em UTC; date em CET/CEST | created_at em ISO 8601 | |
tags e tag | data.tags: objeto {nome: valor} | |
reason | data.bounce.message e data.failed.reason | |
X-Mailin-custom, devolvido no evento | Sem equivalente | Guarde os seus dados no banco, junto com o id do e-mail, ou use tags. |
| Sem assinatura documentada: usuário e senha na URL, token Bearer, cabeçalhos próprios ou lista de IPs | Padrão Standard Webhooks, HMAC-SHA256: webhook-id, webhook-timestamp e webhook-signature | O segredo (whsec_…) é de cada endpoint. Veja a verificação da assinatura. |
| 4 novas tentativas (após 10 minutos, 1 hora, 2 horas e 8 horas). Resposta 4xx (exceto 429) ou 5xx encerra e descarta o evento | 8 tentativas em cerca de 27 horas. Qualquer resposta que não seja 2xx conta como falha e gera nova tentativa | Todas com o mesmo webhook-id: use para descartar duplicatas. Reenvio manual pelo painel ou por POST /webhooks/{id}/events/{event_id}/replay. |
| Até 40 webhooks, somando marketing e transacionais | O número de endpoints depende do plano | A URL precisa ser HTTPS e pública. Você escolhe os eventos de cada endpoint. |
- Crie o endpoint em Webhooks (painel ou
POST /webhooks) e guarde osigning_secret. Mande um evento de teste pelo painel antes de virar. - Os endereços de teste (
[email protected],[email protected]e outros) geram webhooks reais, sem usar a cota. Dependem do plano. - Tire os webhooks do Brevo só depois de virar todo o tráfego: os e-mails que ainda saem por lá continuam gerando eventos.
Leve quem está bloqueado ou pediu para sair
Faça isto antes de importar contatos: um endereço que está na lista de supressão nunca vira contato. O Brevo lista, por API, os contatos bloqueados ou descadastrados dos e-mails transacionais, com o motivo de cada um.
Motivos hardBounce e contactFlaggedAsSpam na lista de bloqueados.
Coloque na lista de supressão.
Motivos unsubscribedViaMA, unsubscribedViaEmail, unsubscribedViaApi e adminBlocked.
Suprima, se a pessoa não deve receber nem os e-mails do sistema. Se só o marketing parou, importe como descadastrada.
Contatos que aceitaram receber.
Importe como contatos, no passo seguinte.
Contatos que têm número e não têm e-mail.
Deixe de fora: a Postal não tem esses canais.
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
}- A rota é
GET /v3/smtp/blockedContacts, com até 100 por página. Cada item trazemail,blockedAtereason.code. O script leva só os dois motivos de entrega e deixa os demais para você decidir. - Na Postal, os endereços entram com a origem
manual: a diferença entre bounce e reclamação não é guardada. A chave precisa ser de acesso total. Veja a referência de supressões. - O Brevo também tem uma lista de domínios bloqueados. A lista de supressão da Postal guarda endereços, e não domínios inteiros: se precisa disso, recuse o domínio no seu formulário ou no seu sistema.
Exporte a base do Brevo e importe na Postal
O painel do Brevo exporta contatos em CSV, e a API também. Em CRM, Contacts, selecione os contatos e use More actions, Export, escolhendo os atributos. Pela API, o pedido abaixo gera o arquivo e avisa o seu notifyUrl quando ele ficar pronto.
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"
}- Em
actionForContacts, a API aceitaallContacts,subscribed,unsubscribedeunsubscribedPerList. É preciso informar tambémlistId,segmentId,modifiedSinceoucreatedSince(data completa, com fuso). Exporte inscritos e descadastrados em arquivos separados. - Sem CSV,
GET /v3/contacts(até 1.000 por página) eGET /v3/contacts/lists/{id}/contacts(até 500) devolvem JSON comattributes,listIds,listUnsubscribedeemailBlacklisted. - Descadastrados: no arquivo deles, deixe uma coluna Descadastrado com
simem todas as linhas e aponte essa coluna para o campo Descadastrado (sim/não). Quem estava comemailBlacklistedverdadeiro entra aqui, e nunca como inscrito. - Listas: exporte uma lista por arquivo e importe cada um escolhendo o segmento. Só segmentos estáticos recebem contatos importados. Quem saiu de uma lista só (
listUnsubscribed) merece cuidado: se a lista virou um tópico, registre a escolhaopt_outdessas pessoas comPATCH /contacts/{id}/topics. - Crie antes as Propriedades dos atributos que quer manter: a importação não cria propriedades novas. Se você usa um ID próprio (
ext_id) e ele vier no arquivo, aponte-o para o campo de ID externo. - Deixe desligada a opção Disparar automações. Contatos que já existem são atualizados pelo e-mail, e cada arquivo pode ter até 20 MB. O limite de contatos do plano está em Preços: no Grátis são 1.000, no Profissional 5.000 e no Escala 50.000.
- Antes de enviar, passe a lista pela Validação de e-mails.
Refaça campanhas, automações e formulários
Campanhas e automações não passam sozinhas. Não achamos na documentação do Brevo uma exportação delas para outra plataforma, então trate cada uma como nova e aproveite para revisar o que ainda faz sentido.
| No Brevo | Na Postal | O que fazer |
|---|---|---|
| Campanhas de e-mail | Campanhas | Copie o HTML para um template ou cole na campanha. Escolha o segmento (e, se quiser, o tópico), o remetente de um domínio verificado e o assunto. Campanhas já enviadas não são importadas. |
| Automações | Automações | Monte de novo no editor de fluxos: um gatilho e passos de esperar, enviar e-mail, condição, mudar o contato e chamar um webhook. Veja Automações. |
| Segmentos | Segmentos dinâmicos | Refaça os filtros. Só os contatos vêm no arquivo. |
| Formulários de inscrição | Formulários | Recrie, ligue a confirmação por e-mail (double opt-in) e troque o endereço ou o código no seu site. Veja Formulários. |
| Relatórios e histórico | Não vem | Exporte o que quiser guardar antes de encerrar a conta. A Postal guarda e-mails, eventos e logs por 30 dias. |
- Importações não iniciam automações, a menos que você ligue essa opção. Revise quem entraria antes de ativar.
- Cada plano tem um limite de execuções de automações por mês.
Confira o que não tem equivalente e vire o tráfego
Vire um fluxo de cada vez, com o Brevo ainda ligado. Comece pelos endereços de teste e por você mesmo, compare entregas e bounces nos primeiros dias e só então passe o resto.
| No Brevo | O que fazer na Postal |
|---|---|
| SMS e WhatsApp | Sem equivalente. A Postal é uma plataforma de e-mail. |
| CRM de vendas, reuniões e telefone, notificações push, pagamentos, fidelidade e cupons | Sem equivalente. Continue no Brevo ou use outra ferramenta. |
| Modelos com condições e laços | Resolva no seu sistema e mande o HTML pronto, ou variáveis simples. |
IP dedicado (sender.ip) | A documentação da Postal não trata disso. |
batchId | Cancele cada e-mail agendado com POST /emails/{id}/cancel. |
| Lista de domínios bloqueados | Sem equivalente: a supressão guarda endereços. |
| Webhooks autenticados por usuário e senha na URL, token Bearer ou cabeçalhos próprios | A proteção é a assinatura de cada entrega. |
| Eventos de abertura por proxy | Sem evento próprio. |
Antes de virar a chave
- O domínio está verificado na Postal e a chave de API foi criada (só envio e restrita ao domínio, nos sistemas que apenas enviam).
- A chamada de envio foi reescrita e testada com um endereço de teste, e o seu código guarda o
idde cada e-mail. - Os modelos foram recriados e publicados, e os que usavam condições ou laços foram resolvidos no sistema.
- O SMTP aponta para
smtp.postal.socom uma chave de API como senha. - O webhook foi criado, a assinatura é conferida e um evento de teste chegou.
- Os bloqueados por bounce e spam estão na lista de supressão, antes da importação de contatos.
- Quem estava descadastrado entrou como descadastrado, e as automações ficaram desligadas na importação.
- O seu código guarda de qual provedor cada e-mail saiu, e os bounces foram conferidos nos primeiros dias.
- Você decidiu onde ficam SMS, WhatsApp e o CRM, se usava.
Perguntas frequentes
Preciso manter o Brevo durante a migração?
Sim, até terminar: trocar o envio, levar os contatos, recriar campanhas e automações e ver chegarem os eventos dos últimos e-mails que saíram por lá. Se você usa SMS, WhatsApp ou o CRM, eles ficam no Brevo, porque a Postal não tem esses produtos.
Posso manter o domínio autenticado nos dois?
Pode. Os registros têm nomes diferentes (a Postal usa o seletor postal no DKIM e o subdomínio postal no Return-Path), então os dois ficam verificados durante a virada.
Os meus modelos com condições e listas funcionam na Postal?
Não do mesmo jeito. Os templates da Postal só substituem variáveis de texto ou número. Resolva as condições e as listas no seu sistema, monte o HTML final e mande em html, ou passe só os valores já prontos em variables.
O Brevo era o Sendinblue. Este guia vale para mim?
Vale. O guia usa os nomes e as rotas da documentação atual do Brevo (api.brevo.com/v3). Se o seu código ainda usa o nome antigo, confira na documentação do Brevo qual endereço ele chama.
Continue por aqui
Audiência e segmentos
Contatos, etiquetas, tópicos e propriedades organizados.
Saiba maisLista de supressão
Quem não deve receber fica protegido, por time.
Saiba maisWebhooks e eventos
Cada evento de e-mail no seu servidor, com assinatura e novas tentativas.
Saiba maisOutros guias de migração