Integrações
Migrando para o JetSend
Mesmo modelo (REST + JSON, Bearer token), interface mais simples e cobrança em real com NF. Compare antes-e-depois e troque em poucas linhas.
Migrando do Resend
Antes
javascript
// Resendimport { Resend } from "resend";const resend = new Resend(process.env.RESEND_KEY);await resend.emails.send({ from: "no-reply@suaempresa.com.br", to: "cliente@exemplo.com", subject: "Bem-vindo!", html: "<h1>Olá!</h1>",});Depois
javascript
// JetSendconst r = await fetch("https://api.jetsend.com.br/v1/messages", { method: "POST", headers: { Authorization: `Bearer ${process.env.JETSEND_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ from: "no-reply@suaempresa.com.br", to: "cliente@exemplo.com", subject: "Bem-vindo!", html: "<h1>Olá!</h1>", }),});const data = await r.json();- · Mesmos campos (from/to/subject/html), só muda o transport.
- · Webhooks de evento idênticos em estrutura: delivered, bounced, complained, opened, clicked.
- · Conta em real, NF brasileira automática, suporte em PT-BR.
Migrando do Postmark
Antes
javascript
// Postmarkimport { ServerClient } from "postmark";const client = new ServerClient(process.env.POSTMARK_TOKEN);await client.sendEmail({ From: "no-reply@suaempresa.com.br", To: "cliente@exemplo.com", Subject: "Bem-vindo!", HtmlBody: "<h1>Olá!</h1>",});Depois
javascript
// JetSendconst r = await fetch("https://api.jetsend.com.br/v1/messages", { method: "POST", headers: { Authorization: `Bearer ${process.env.JETSEND_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ from: "no-reply@suaempresa.com.br", to: "cliente@exemplo.com", subject: "Bem-vindo!", html: "<h1>Olá!</h1>", }),});const data = await r.json();- · Campos viram lowercase (from, to, subject, html), Postmark usa PascalCase.
- · MessageStream do Postmark equivale ao Configuration Set isolado por tenant que o JetSend provisiona automaticamente.
- · Importação de templates: ainda manual. Roadmap traz API de templates em breve.
Migrando do SendGrid
Antes
javascript
// SendGridimport sgMail from "@sendgrid/mail";sgMail.setApiKey(process.env.SENDGRID_KEY);await sgMail.send({ from: "no-reply@suaempresa.com.br", to: "cliente@exemplo.com", subject: "Bem-vindo!", html: "<h1>Olá!</h1>",});Depois
javascript
// JetSendconst r = await fetch("https://api.jetsend.com.br/v1/messages", { method: "POST", headers: { Authorization: `Bearer ${process.env.JETSEND_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ from: "no-reply@suaempresa.com.br", to: "cliente@exemplo.com", subject: "Bem-vindo!", html: "<h1>Olá!</h1>", }),});const data = await r.json();- · Mapeamento direto. SendGrid aceita 'personalizations'; JetSend recebe 1 destinatário por chamada (use loop ou batch).
- · Custo: SendGrid Essentials começa em US$ 19,95/mês; JetSend Starter custa R$ 49 (10k emails) com NF.
- · Pool de IP dedicado disponível no plano Business.
Migrando do Mailgun
Antes
javascript
// Mailgunimport formData from "form-data";import Mailgun from "mailgun.js";const mg = new Mailgun(formData).client({ username: "api", key: process.env.MAILGUN_KEY,});await mg.messages.create("suaempresa.com.br", { from: "no-reply@suaempresa.com.br", to: "cliente@exemplo.com", subject: "Bem-vindo!", html: "<h1>Olá!</h1>",});Depois
javascript
// JetSendconst r = await fetch("https://api.jetsend.com.br/v1/messages", { method: "POST", headers: { Authorization: `Bearer ${process.env.JETSEND_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ from: "no-reply@suaempresa.com.br", to: "cliente@exemplo.com", subject: "Bem-vindo!", html: "<h1>Olá!</h1>", }),});const data = await r.json();- · Mailgun exige domínio no path, JetSend deriva o domínio a partir do 'from' (é mais simples).
- · Formato JSON puro em vez de multipart/form-data.
- · Sem cobrança por validação de email; sem add-ons surpresa.
Pronto para começar?
Comece em 5 minutos: cadastro → verifica domínio → manda o primeiro email.
