Como Enviar Email via API em JavaScript (Tutorial Node.js)

Índice
Índice 14 seções
Primeiros Passos
Enviando e-mails
Produção
Referência
Tutorial de JavaScript

Como Enviar E-mail via API em JavaScript (Tutorial do Node.js)

Pule o boilerplate do SMTP. Este guia mostra como enviar e-mails em Node.js usando o API unificada de e-mail Unipile - com código para copiar e colar para Gmail, Outlook e SMTP em menos de 10 linhas de JavaScript.

api de envio de e-mail javascript API para enviar e-mail com Node.js Gmail / Outlook / SMTP ESM + async/await
sendEmail.mjs
import { UnipileClient } from 'unipile-node-sdk'; const client = novo UnipileClientprocess.env.UNIPILE_DSN, process.env.UNIPILE_TOKEN ); await cliente.email.enviar({ account_id: 'SEU_ID_DA_CONTA', para: [{ nome_exibicao: 'Alice', identificador: 'alice@example.com' }], assunto: 'Olá do Node.js', body: '

Enviado via Unipile!

'
});
Email entregue - 202 Aceito
Funciona com: Gmail Perspectivas IMAP
Resumo

Exemplo de Node.js de 5 linhas

Se você já sabe o que é um Enviar API de e-mail e apenas quero enviar código JavaScript da API de e-mail que realmente funcione, aqui está. O tutorial completo segue abaixo.

1
Instale o SDK
npm install unipile-node-sdk
2
Definir variáveis de ambiente
Adicionar UNIPILE_DSN e UNIPILE_TOKEN para você .env arquivo.
3
Vincular uma conta de e-mail
OAuth para Gmail/Outlook ou credenciais SMTP para qualquer servidor IMAP - uma chamada de API.
4
Chamar client.email.enviar()
Passar account_id, para, assuntoe corpo. Feito.
O mesmo código funciona para Gmail, Outlook e qualquer servidor IMAP - nenhuma lógica específica do provedor é necessária. Verifique Guia da API de E-mail para a visão geral completa do conceito.
enviar.mjs
import { UnipileClient } from 'unipile-node-sdk'; const client = novo UnipileClientprocess.env.UNIPILE_DSN, process.env.UNIPILE_TOKEN ); const resultado = aguardar cliente.email.enviar({ account_id: 'acc_xxxxxxxxxxxxxxxx', para: [{ nome_de_exibição: 'Alice Martin', identificador: 'alice@acme.com' }], assunto: 'Olá do Node.js', body: '

Enviado via API Unipile!

'
}); console.log(resultado); // { tracking_id: 'msg_...' }
Configuração

Pré-requisitos e Configuração

Antes de poder usar o fluxo de trabalho JavaScript da API de envio de e-mail em produção, você precisa de quatro coisas: uma versão compatível do Node.js, o SDK Unipile, uma chave de API e um endpoint DSN.

Node.js 18+ (20 recomendado)
O SDK Unipile usa nativo fetch e de topo await. É recomendado usar o Node 20 LTS para produção. Verifique sua versão com node -v.
Chave de API e DSN da Unipile
Cadastre-se no painel Unipile para obter seu token de acesso e DSN (um endpoint HTTPS pessoal como api4.unipile.com:13444Ambos são necessários para inicializar o cliente.
ESM ou CommonJS
O SDK suporta ambos. Para ESM, use .mjs arquivos ou conjunto "tipo":"módulo" em package.json. Para CommonJS, dinâmico import() funciona também - exemplos mostrados abaixo.
Uma conta de e-mail vinculada
Você envia email através Uma conta vinculada (Gmail, Outlook ou IMAP). A próxima seção o guiará pelo fluxo OAuth para vincular uma. Você só faz isso uma vez por conta.
Instalando o SDK da Unipile
npm
fio
pnpm
npm install unipile-node-sdk
yarn add unipile-node-sdk
pnpm adicionar unipile-node-sdk
.env
# Credenciais da Unipile (nunca envie este arquivo para o commit) UNIPILE_DSN=https://api4.unipile.com:13444 UNIPILE_TOKEN=seu_token_de_acesso_aqui # O ID da conta de e-mail vinculada ID_DA_CONTA_DE_EMAIL=acc_xxxxxxxxxxxxxxxx

Adicionar .env para você .gitignore. Usar dotenv ou o Node 20.6+ nativo --arquivo-env bandeira para carregá-la: node --env-file=.env send.mjs.

Vinculação de Conta

Conectando Sua Primeira Conta de E-mail

O API de e-mail unificada usa um único account_id para abstrair as diferenças de fornecedores. Vincule uma conta uma vez e, em seguida, chame client.email.enviar() idêntico em todos os três provedores.

Escolha seu provedor abaixo para ver o trecho exato do Node.js. O account_id retornado é o que você armazena e reutiliza para cada envio subsequente.

GmailGmail OAuth
PerspectivasOutlook / Microsoft 365
IMAPSMTP / IMAP
conectar-gmail.mjs
import { UnipileClient } from 'unipile-node-sdk'; const client = novo UnipileClientprocess.env.UNIPILE_DSN, process.env.UNIPILE_TOKEN); // Etapa 1: gerar um link OAuth hospedado para o Gmail const { url } = aguardar cliente.conta.criarLinkDeAutenticaçãoHospedado({ tipo: 'Google', success_redirect_url: process.env.URL_DE_RETORNO_OAUTH, failure_redirect_url: process.env.URL_DE_RETORNO_OAUTH ?erro=1', }); // Passo 2: redirecione seu usuário para `url` console.log('Redirecionar usuário para:', url); // Passo 3: Unipile envia o account_id para sua callback // Armazene isso: process.env.EMAIL_ACCOUNT_ID = result.account_id
conectar-outlook.mjs
import { UnipileClient } from 'unipile-node-sdk'; const client = novo UnipileClientprocess.env.UNIPILE_DSN, process.env.UNIPILE_TOKEN); // Funciona para Outlook pessoal E Microsoft 365 / Exchange Online const { url } = aguardar cliente.conta.criarLinkDeAutenticaçãoHospedado({ tipo: 'MICROSOFT', success_redirect_url: process.env.URL_DE_RETORNO_OAUTH, failure_redirect_url: process.env.URL_DE_RETORNO_OAUTH ?erro=1', }); // Redireciona o usuário -> eles completam o fluxo OAuth da Microsoft console.log('Redirecionar usuário para:', url); // Veja: /syncing-emails-with-microsoft-graph-api-a-developers-guide/
conectar-imap.mjs
import { UnipileClient } from 'unipile-node-sdk'; const client = novo UnipileClientprocess.env.UNIPILE_DSN, process.env.UNIPILE_TOKEN); // SMTP/IMAP: passar credenciais diretamente (sem redirecionamento OAuth) const account = aguardar cliente.conta.create({ tipo: 'IMAP', imap: { username: process.env.IMAP_USUÁRIO, password: process.env.IMAP_SENHA, host: process.env.IMAP_HOST, porta: 993, }, smtp: { username: process.env.IMAP_USUÁRIO, password: process.env.IMAP_SENHA, host: process.env.SMTP_HOST, porta: 587, }, }); console.log(account.account_id); // guarde isto
Gmail Gmail
Usa Google OAuth 2.0. Não são necessárias senhas de aplicativo. Veja o completo Tutorial de envio de e-mail pela API do Gmail para configurações de escopos e tela de consentimento.
Perspectivas Outlook / Microsoft 365
Usa OAuth do Microsoft Graph. Abrange Outlook pessoal e locatários do M365. Detalhes no Guia de email do Microsoft Graph.
IMAP SMTP / IMAP
Funciona com qualquer provedor que exponha IMAP/SMTP (Yahoo, ProtonMail Bridge, servidores de e-mail personalizados). Leia o Guia da solução de API IMAP.
API principal

Enviando seu primeiro e-mail do Node.js

Três padrões prontos para produção para o fluxo de trabalho da API de envio de e-mail em JavaScript: texto simples, HTML com CC/CCO e leitura do objeto de resposta. Todos usam o mesmo client.email.enviar() ligar.

1
E-mail de texto simples
Caso mais simples
plain-text.mjs
import { UnipileClient } from 'unipile-node-sdk'; const client = novo UnipileClientprocess.env.UNIPILE_DSN, process.env.UNIPILE_TOKEN); const resultado = aguardar cliente.email.enviar({ account_id: process.env.ID_DA_CONTA_DE_EMAIL, para: [{ nome_exibicao: 'Bob', identificador: 'bob@example.com' }], assunto: 'Bem-vindo à plataforma', body: 'Oi Bob, sua conta está pronta.', }); console.log(result.tracking_id); // msg_xxxxxxxxxxxxxxxx
202 Aceito - tracking_id.result preenchido
2
Corpo do HTML com CC e BCC
Multi-destinatário
html-cc-bcc.mjs
const resultado = aguardar cliente.email.enviar({ account_id: process.env.ID_DA_CONTA_DE_EMAIL,para: [{ display_name: 'Alice', identificador: 'alice@acme.com' }], cc: [{ display_name: 'Gerente', identificador: 'boss@acme.com' }], bcc: [{ nome_exibido: 'Auditoria', identificador: 'audit@internal.io' }, assunto: 'Sua fatura #1042', // Corpo do HTML - o provedor o renderiza nativamente body: `

Fatura #1042

Valor devido: $299

Pagar agora `
, }); console.log('Enviado:', result.tracking_id);
3
Referência de campo completo
Todos os parâmetros suportados
CampoTipoObrigatórioDescrição
account_idstringObrigatórioID da conta de e-mail vinculada para enviar
paraDestinatários[]ObrigatórioMatriz de {nome_exibicao, identificador} objetos
assuntostringObrigatórioAssunto do email
corpostringObrigatórioTexto simples ou string HTML
ccDestinatários[]OpcionalCopiar destinatários ocultos
Cópia ocultaDestinatários[]OpcionalCópia oculta
fromDestinatárioOpcionalSubstituir nome de exibição do remetente
responder_parastringOpcionalID da mensagem do provedor para responder (threads)
anexosMatrizOpcionalMatriz de [nome do arquivo, Buffer] tuplas
cabeçalhos_personalizadosobjeto[]OpcionalMatriz de cabeçalhos X personalizados
opções_de_rastreamentoobjetoOpcional{abre, links, rótulo} - ativar rastreamento de abertura/clique
Grátis para começar
Pronto para enviar e-mails via API em JavaScript?

Obtenha sua chave de API, vincule uma conta Gmail ou Outlook em minutos e execute os exemplos do Node.js deste guia contra caixas de correio reais.

Anexos

Enviando anexos no Node.js

O anexos campo aceita um array de [nome do arquivo, Buffer] tuplas. Leia o arquivo com o Node fs.readFileSync ou transmita com fs.promises.readFile.

Arquivo único do disco
Uso fs.promises.readFile(caminho) para obter um Buffer, então passe ['nome_do_arquivo.pdf', buffer]. Funciona para PDF, DOCX, imagens, qualquer binário.
Múltiplos anexos
Passe um array de tuplas. Cada tupla é independente - misture tipos de arquivos livremente. Não há limite rígido por anexo, mas mantenha a carga total abaixo do limite do seu plano.
Imagens inline (CID)
Inserir imagens no corpo do HTML usando o cid: esquema. Faça referência ao mesmo nome de arquivo usado na tupla de anexos: <img src="cid:logo.png">.
Buffer de um stream
Gerar um PDF sob demanda (por exemplo, com pdfkit), colete-o em um Buffer e anexe sem gravar em disco. Seguro para produção em serverless.
anexar-arquivo.mjs
import { UnipileClient } from 'unipile-node-sdk'; import promessas como fs } from 'node:fs'; const client = novo UnipileClientprocess.env.UNIPILE_DSN, process.env.UNIPILE_TOKEN); // Lê arquivo para um Buffer const bufferPdf = aguardar fs.lerArquivo('./nota fiscal.pdf'); await cliente.email.enviar({ account_id: process.env.ID_DA_CONTA_DE_EMAIL, para: [{ nome_exibido: 'Cliente', identificador: 'client@example.com' }], assunto: 'Sua fatura está anexada', body: '

Por favor, encontre sua fatura em anexo.

'
, anexos: [ ['nota fiscal.pdf', bufferPdf], // [nome do arquivo, Buffer] ], });
anexar-múltiplos-inline.mjs
const [logo, relatório] = aguardar Promise.allfs.lerArquivo('./logo.png'), fs.lerArquivo('./relatório.xlsx'), ]); await cliente.email.enviar({ account_id: process.env.ID_DA_CONTA_DE_EMAIL, para: [{ nome_exibido: 'Equipe', identificador: 'team@acme.com' }], assunto: 'Relatório do Q1', body: Logo

Relatório Q1

Veja a planilha anexa para detalhes.

`
, anexos: [ ['logo.png', logo], // inline via cid:logo.png no corpo ['relatório.xlsx', relatório], // anexo padrão ], });
Limite de tamanho: Mantenha anexos individuais com menos de 25 MB (o limite máximo do Gmail). Para arquivos grandes, carregue-os em um serviço de armazenamento em nuvem e inclua um link para download no corpo do e-mail.
Avançado

Respostas, Tópicos e Rastreamento

Vá além dos envios básicos: respostas encadeadas, cabeçalhos personalizados para idempotência, rastreamento de abertura/clique via webhooks e enviar email em nome de um usuário.

1
Respondendo a um tópico

Passe o ID da mensagem do provedor (retornado na resposta original do envio ou ao listar emails) como responder_para. Unipile injeta o correto Em-Resposta-A e Referências cabeçalhos para que as respostas sejam encadeadas corretamente no Gmail, Outlook e clientes IMAP.

reply-thread.mjs
await cliente.email.enviar({ account_id: process.env.ID_DA_CONTA_DE_EMAIL, para: [{ nome_exibido: 'Alice', identificador: 'alice@acme.com' }], assunto: 'Re: Sua pergunta', body: '

Obrigado por entrar em contato! Aqui está a resposta...

'
, // ID da mensagem do provedor do e-mail original responder_para: 'msg_xxxxxxxxxxxxxxxx', });
2
Cabeçalhos personalizados e idempotência

Uso cabeçalhos_personalizados para adicionar qualquer X- cabeçalho. Um padrão comum é X-Idempotency-Key para evitar envios duplicados ao tentar novamente após um tempo limite de rede.

custom-headers.mjs
import { randomUUID } from 'node:crypto'; await cliente.email.enviar({ account_id: process.env.ID_DA_CONTA_DE_EMAIL, para: [{ nome_exibido: 'Bob', identificador: 'bob@example.com' }], assunto: 'Confirmação de pedido #9981', body: '

Seu pedido está confirmado.

'
, custom_headers: [ { name: 'X-Idempotency-Key', valor: UUID Aleatório}, { nome: 'X-Order-ID', valor: '9981' }, ], });
3
Rastreamento de aberturas e cliques via webhooks

Habilitar acompanhamento em opções_de_rastreamento. Unipile dispara um evento de webhook (email.aberto / email.link_clicado) para a sua URL de webhook registrada com o rótulo você define aqui para poder correlacionar eventos às suas IDs internas.

rastreamento.mjs
await cliente.email.enviar({ account_id: process.env.ID_DA_CONTA_DE_EMAIL, para: [{ nome_exibido: 'Chumbo', identificador: 'lead@prospect.com' }], assunto: 'Acompanhando seu teste', body: '

Oi, queria dar uma verificada...

'
, tracking_options: { opens: true, // dispara webhook de email.aberto links: true, // aciona o webhook email.link_clicked rótulo: 'crm_lead_12345', // seu ID de correlação interna }, });
4
Enviando em nome de outro usuário

Ao construir aplicativos SaaS multilocatário, cada usuário final vincula sua própria conta de e-mail. Armazene o account_id por usuário em seu banco de dados e passá-lo no momento do envio. Veja o guia completo em Como enviar e-mail em nome de um usuário.

em nome.mjs
// Cada usuário tem seu próprio account_id vinculado armazenado em seu banco de dados async function enviarComoUsuario(userId, para, assunto, corpo) { const usuário = aguardar banco de dados.obterUsuário(identificadorDoUsuario); return cliente.email.enviaraccount_id: user.unipile_account_id, // por-usuário para, assunto, corpo, }); } // O e-mail é enviado do Gmail de Alice, não do endereço do seu servidor await enviarComoUsuario('user_alice', destinatários, assunto, corpo);

Trabalhando em Python? Veja nosso Implementação Python guia.

Pronto para produção

Tratamento de Erros e Tentativas

Falhas de rede e limites de taxa são inevitáveis em escala. Aqui está um padrão async/await de nível de produção para sua implementação JavaScript da API de envio de e-mail – com retrocesso exponencial e registro estruturado usando Winston ou Pino.

202
Aceito
E-mail enfileirado com sucesso. O id_rastreamento está populado. Nenhuma nova tentativa necessária.
429
Taxa Limite
Muitas requisições. Respeite a Tentar Novamente Após cabeçalho. Use retrocesso exponencial.
401
Não autorizado
Token inválido ou expirado. Verifique UNIPILE_TOKEN Variável de ambiente. Não tentar novamente - corrigir credenciais.
422
Erro de Validação
Campo obrigatório ausente ou destinatário malformado. Verifique o corpo da mensagem de erro - ele especifica qual campo falhou.
503
Serviço Indisponível
Erro transitório no servidor. É seguro tentar novamente com estratégia de recuo. Verifique status.unipile.com para incidentes.
404
Conta não encontrada
O account_id não existe ou foi revogada. Reative a conta.
Backoff exponencial com async/await
send-with-retry.mjs
import { UnipileClient } from 'unipile-node-sdk'; import logger from './logger.mjs'; // Winston or Pino instance const client = new UnipileClient(process.env.UNIPILE_DSN, process.env.UNIPILE_TOKEN); async function sendWithRetry(payload, maxAttempts = 4) { let attempt = 0; while (attempt < maxAttempts) { try { const result = await client.email.send(payload); logger.info({ tracking_id: result.tracking_id }, 'Email sent'); return result; } catch (err) { const status = err?.status ?? err?.statusCode; // Do not retry on client errors (4xx except 429) if (status >= 400 && status !== 429 && status < 500) { logger.error({ status, err }, 'Non-retryable error'); throw err; } attempt++; if (attempt >= maxAttempts) throw err; // Exponential backoff: 1s, 2s, 4s, 8s... const delay = 1000 * 2 ** (attempt - 1); logger.warn({ attempt, delay, status }, 'Retrying...'); await new Promise(r => setTimeout(r, delay)); } } } // Usage await sendWithRetry({ account_id: process.env.EMAIL_ACCOUNT_ID, to: [{ display_name: 'User', identifier: 'user@example.com' }], subject: 'Your report is ready', body: '

Click to download.

'
, });
Segurança

Melhores Práticas de Segurança em Node.js

Seu UNIPILE_TOKEN concede acesso completo à API. Nunca o exponha do lado do cliente. Veja o completo Guia de segurança de API de e-mail para tópicos avançados, incluindo DKIM, SPF e rotação de tokens OAuth.

Nunca exponha chaves do lado do cliente
Seu UNIPILE_TOKEN deve permanecer no servidor. Qualquer JavaScript do lado do navegador - incluindo componentes de cliente Next.js, frontend React ou Vite - NÃO deve importar o token diretamente.
Use uma rota de proxy de backend
No Next.js, crie uma rota de API (/api/enviar-email. Em Express, um endpoint POST. Autentique seus próprios usuários primeiro, depois chame o servidor Unipile com o token do ambiente.
Tokens de atualização do OAuth
O Unipile gerencia a atualização de tokens OAuth do Gmail e Outlook automaticamente. Seus armazenados account_id resta válido. Você não precisa lidar com a expiração do token de acesso.
DKIM e SPF (reputação do remetente)
E-mails enviados através de contas Gmail/Outlook vinculadas herdam as assinaturas DKIM desses provedores. Para contas IMAP/SMTP, configure o DKIM no seu servidor de e-mail antes de vincular.
Validar entrada do destinatário
Se os destinatários vierem da entrada do usuário, valide o formato do e-mail no lado do servidor antes de chamar a API. A API rejeitará endereços malformados com um 422, mas a validação antes da chamada fornece erros de UX mais claros.
Escopo de tokens de API por ambiente
Use projetos e tokens Unipile separados para desenvolvimento, staging e produção. Isso evita que e-mails de teste cheguem a usuários reais e limita o raio de impacto caso uma chave seja exposta.
ERRADO Token no código frontend
// client.js - NUNCA faça isso const cliente = new UnipileClient( 'https://api4.unipile.com:13444', 'sk_live_xxxxxxxxxx' // exposto! );
CORRETO Rota de proxy de backend (Next.js)
// app/api/send-email/route.js export async function POST(req) { // verifica autenticação primeiro const session = await getServerSession(); if (!session) return new Response(null, { status: 401 }); const client = new UnipileClient( process.env.UNIPILE_DSN, // apenas-no-servidor process.env.UNIPILE_TOKEN // apenas-no-servidor ); await client.email.send({...}); }
Leia o guia completo de segurança de API de e-mail
Erros Comuns

Armadilhas comuns (específicas do Node.js)

Estes são os erros mais frequentes que os desenvolvedores cometem ao integrar uma API de envio de e-mail em JavaScript pela primeira vez. Cada um é fácil de evitar assim que você conhece o padrão - e todos se aplicam igualmente ao contexto da API de envio de e-mail do Node.js.

1
Esquecer o await de nível superior (CommonJS vs ESM)
Nível superior await só funciona em módulos ES (.mjs ou "tipo":"módulo"). No CommonJS, coloque sua chamada send dentro de um assíncrono IIFE ou usar .then(). O SDK funciona em ambos - basta escolher o formato de módulo correto.
cjs-workaround.cjs
// CommonJS: embrulhar em IIFE assíncrona (assíncrono () => { const { UnipileClient } = aguardar import('unipile-node-sdk'); const client = novo UnipileClientprocess.env.UNIPILE_DSN, process.env.UNIPILE_TOKEN); await cliente.email.enviar({ /* ... */ }); })();
2
Usando Promise.all para envios em massa sem consideração por limites de taxa
Disparando 1.000 Promise.all envios simultâneos atingirão limites de taxa e causarão erros 429. Use um limitador de concorrência como p-limite para limitar requisições paralelas.
bulk-send.mjs
import pLimite from 'p-limite'; const limite = pLimite(5); // máximo de 5 envios simultâneos const resultados = aguardar Promise.alldestinatários.mapa(r => limite(() => cliente.email.enviar({ account_id: process.env.ID_DA_CONTA_DE_EMAIL, para: [r], assunto, corpo, }))) );
3
Codificação incorreta do buffer para anexos
Sempre passe um cru Buffer objeto - não é uma string base64, não é uma string UTF-8. Se você tiver conteúdo base64 (por exemplo, de um webhook ou resposta de API), converta-o primeiro: Buffer.from(base64str, 'base64').
buffer-codificação.mjs
// ERRADO: passando uma string anexos: [['arquivo.pdf', 'JVBERi0xLjQ...']] // string base64 - problema! // CORRETO: Objeto buffer anexos: [['arquivo.pdf', Buffer.from(cadeia_base64, 'base64')]] // ou do disco: anexos: [['arquivo.pdf', await fs.lerArquivo('./arquivo.pdf')]]
4
Rejeições de Promessa não tratadas estão travando o processo
No Node.js, uma rejeição não tratada em um "fire-and-forget" enviar() Chamada irá travar o processo no Node 15+. Sempre await o resultado ou anexar um .capturar() manipulador.
rejeição-não-tratada.mjs
// INCORRETO: fire-and-forget - trava em erro no Node 15+ cliente.email.enviar(carga útil); // sem await, sem .catch() // CORRETO: sempre trate a promessa await cliente.email.enviar(carga útil) // opção 1: await .capturaerro => registrador.erro(err)); // opção 2: .catch()
5
Usando esta API diretamente no JavaScript do navegador
O SDK Unipile e o seu UNIPILE_TOKEN são apenas para o lado do servidor Node.js. O fetch do navegador diretamente para a API exporia seu token. Use uma rota de backend (rota de API Next.js, endpoint Express, função Netlify/Vercel) como proxy.
6
Enviando sem uma conta vinculada (account_id ausente)
Você não pode enviar de um endereço genérico - cada envio deve referenciar um endereço válido account_id de uma conta Gmail, Outlook ou IMAP previamente vinculada. A API retorna 404 se o account_id estiver ausente ou tiver sido desvinculado.

Perguntas frequentes

Perguntas frequentes sobre o envio de e-mails em JavaScript e Node.js com a API unificada de e-mail da Unipile.

Use a API de e-mail unificada da Unipile em vez de uma conexão SMTP direta. Instalar unipile-node-sdk, inicializar UnipileClient com seu DSN e token, vincule uma conta Gmail ou Outlook via OAuth, e então chame client.email.enviar(). Nenhum servidor SMTP, nenhuma porta 587, nenhuma configuração TLS necessária do seu lado – a Unipile cuida da camada de transporte.

Não - e você não deveria. Chamar a API do Unipile a partir do JavaScript do navegador exporia sua UNIPILE_TOKEN para qualquer usuário que abrir as Ferramentas do Desenvolvedor. Sempre chame a API a partir de um contexto Node.js do lado do servidor: uma rota do Express, uma rota de API do Next.js (app/api/), uma Vercel Edge Function ou uma Netlify Function.

Seu frontend envia uma requisição para seu próprio endpoint de backend, que autentica a sessão do usuário e, em seguida, chama o Unipile no lado do servidor.

O Nodemailer se conecta diretamente a um servidor SMTP a partir do seu processo Node.js. Ele exige que você gerencie credenciais SMTP, lide com TLS, configure DKIM por conta própria e resolva as peculiaridades de cada provedor separadamente.

A API de e-mail Unipile é uma camada de abstração em nuvem: você vincula contas via OAuth (sem necessidade de credenciais SMTP para Gmail/Outlook), obtém um SDK unificado e consistente para todos os provedores, e a Unipile cuida do transporte, novas tentativas e renovação de token. A contrapartida é que seus envios passam pela infraestrutura da Unipile em vez de uma conexão SMTP direta.

Sim. O unipile-node-sdk pacotes com definições de tipo TypeScript. Você obtém preenchimento automático completo e segurança de tipo para o enviar() carga útil, incluindo Destinatário, opções_de_rastreamento, e o tipo de resposta.

import { UnipileClient } from 'unipile-node-sdk'; // Tipos TS completos - autocompletar funciona no VSCode const cliente: UnipileClient = novo UnipileClient(dsn, token); const resultado = aguardar cliente.email.enviar({ /* digitado! */ });

Para envios de alto volume, use um limitador de concorrência (por exemplo,. p-limite com 5 a 10 chamadas simultâneas), adicione exponential backoff em respostas 429 e distribua os envios entre várias contas vinculadas, se possível. Cada conta de e-mail vinculada tem seus próprios limites de envio definidos pelo provedor (Gmail: ~500/dia para contas comuns, mais alto para Workspace).

Para e-mails em massa/marketing de verdade em escala (milhões de destinatários), considere um ESP dedicado (Mailgun, SendGrid) juntamente com o Unipile para envios transacionais e baseados em OAuth.

Next.js: use rotas de API (app/api/enviar-email/route.js) ou Server Actions. Mantenha a instanciação do SDK apenas no lado do servidor.

Nuxt: rotas do servidor (server/api/send-email.post.tsO SDK é apenas para Node.js, portanto, não pode ser incluído em um composable ou plugin que é executado no cliente.

NestJS: criar um MóduloEmail com um serviço que envolve UnipileClient. Injete-o onde você precisar acionar envios - em controladores, trabalhos CRON ou manipuladores de eventos.

Ainda tem dúvidas? Nossa equipe está aqui para ajudar.

pt_BRBR