developerAPIemail testingSMTPIMAP

API de Email para Desenvolvedores: Caixas de Entrada Descartáveis, Credenciais SMTP e Webhooks

Um guia para desenvolvedores sobre email programático — API de email descartável, credenciais SMTP, acesso IMAP e webhooks para testes, staging e produtos SaaS.

September 8, 2025·14 min de leitura·Reusable.Email
API de Email para Desenvolvedores: Caixas de Entrada Descartáveis, Credenciais SMTP e Webhooks

Desenvolvedores precisam de email para coisas que nada têm a ver com comunicação. Testes automatizados precisam enviar e receber mensagens. Ambientes de staging precisam de caixas de entrada isoladas que não vaze para usuários de produção. Produtos SaaS precisam dar a cada cliente um endereço de email real. Plataformas de temp mail precisam de um backend que realmente funcione.

Tudo isto requer controle programático sobre email — criando caixas de entrada, enviando mensagens, lendo respostas, reagindo a eventos de entrega. Este guia cobre como construir cada um destes casos de uso usando protocolos padrão e infraestrutura acessível.

Por que Desenvolvedores Precisam de uma API de Email

A palavra "API" no contexto de email geralmente significa uma de duas coisas: uma API REST proprietária para enviar e receber (como SendGrid ou Mailgun), ou protocolos padrão — IMAP e SMTP — que toda linguagem de programação já tem bibliotecas para.

APIs proprietárias são boas para envio transacional. Você chama um endpoint, passa um payload, e o serviço entrega o email. Mas quando você precisa receber email, ler email, organizar email, ou dar aos usuários sua própria caixa de entrada, APIs proprietárias de envio não são suficientes. Você precisa de todo o stack de email.

Os casos de uso que levam desenvolvedores a buscar uma API de email geralmente caem em quatro categorias:

  • Testes e QA: Verificar que sua aplicação envia os emails certos, com o conteúdo certo, para os endereços certos
  • Isolamento de staging: Assegurar que ambientes de desenvolvimento e staging não vazem email para usuários de produção
  • Caixas de entrada por usuário: Dar a cada usuário em sua aplicação seu próprio endereço de email para receber e enviar
  • Construir produtos de email: Criando serviços de temp mail, ferramentas de privacidade, ou plataformas baseadas em email

Cada um destes tem requisitos diferentes, mas todos compartilham a mesma fundação: você precisa de caixas de entrada reais com credenciais reais que você consegue interagir programaticamente.

Três Abordagens para Email no Desenvolvimento

Cada time eventualmente chega em uma de três estratégias para lidar com email fora de produção.

1. Contas de Email Reais

A abordagem mais simples: criar contas Gmail ou Outlook e codificar hardcoded em seus testes e ambiente de staging.

Isto funciona até que não funciona mais. Gmail limita acesso programático. Google requer OAuth2 para conexões IMAP — você não consegue apenas passar um nome de usuário e senha. Credenciais compartilhadas são rotacionadas e quebram CI. Emails de teste vaz para caixas de entrada reais. Um desenvolvedor acidentalmente envia 500 notificações de teste para um endereço do cliente a partir de staging. O custo de "simples" se compõe rápido.

Há também o overhead de gerenciamento de conta. Criar uma nova conta Gmail para cada ambiente de teste significa gerenciar 2FA, senhas de app, e detecção de bot cada vez mais agressiva do Google. É infraestrutura frágil construída em um serviço que não foi projetado para este caso de uso.

2. Sandboxes de Email

Ferramentas como Mailtrap interceptam email de saída e o exibem em um painel. Sua aplicação pensa que está enviando email real, mas nada é realmente entregue.

Sandboxes são úteis para revisar templates HTML e capturar envios acidentais. Mas eles não conseguem testar entrega real. Você não consegue verificar que um email realmente chega em uma caixa de entrada, é analisado corretamente por um cliente IMAP, ou dispara um webhook. Para testes end-to-end, sandboxes são incompletos.

Há também a lacuna de protocolo. Sandboxes te dão SMTP (para envio) mas não IMAP (para leitura). Seus testes conseguem afirmar que um email foi capturado pelo sandbox, mas eles não conseguem testar o fluxo de recuperação completo que seu código de produção usa. Leia mais sobre este tradeoff em nosso guia de testes SMTP.

3. Caixas de Entrada Reais sob Demanda

A terceira abordagem é criar caixas de entrada de email reais programaticamente — caixas de entrada com credenciais reais de IMAP e SMTP que enviam e recebem email real. Isto te dá cobertura completa end-to-end sem os riscos de usar contas pessoais.

Isto é o que caixas de entrada gerenciadas do Reusable.Email fornece. Cada caixa de entrada gerenciada é uma conta de email completa com acesso IMAP, SMTP e POP3. Você a cria, usa em seus testes ou produto, e funciona com qualquer biblioteca de email em qualquer linguagem.

A vantagem chave é compatibilidade de protocolo. Porque caixas de entrada gerenciadas usam IMAP e SMTP padrão, seu código de teste e seu código de produção usam as mesmas bibliotecas, os mesmos padrões de conexão, e o mesmo tratamento de erros. Não há camada de abstração apenas-teste que esconde comportamento real.

Reusable.Email para Desenvolvedores

Uma caixa de entrada gerenciada no Reusable.Email custa $3 uma vez — não mensal, não por usuário, não baseado em uso. Este $3 te consegue:

  • Acesso IMAP em imap.reusable.email:993 (SSL/TLS)
  • Acesso SMTP em smtp.reusable.email:587 (STARTTLS)
  • Acesso POP3 para clientes que o preferem
  • Retenção de email de 365 dias
  • Pastas customizadas, filtragem de spam, encaminhamento, envio/resposta
  • Funciona com Apple Mail, Thunderbird, Outlook, ou qualquer biblioteca padrão

Para times construindo produtos em cima de email, o nível whitelabel ($30/mês) adiciona uma API REST, webhooks para eventos de email, um painel de admin, e zero marca Reusable.Email. Mais em guia de serviço de email whitelabel.

Caso de Uso 1: Testes de Email e QA

Testes automatizados que envolvem email tipicamente precisam:

  1. Criar uma caixa de entrada fresca para a execução do teste
  2. Disparar uma ação que envia email (signup, reset de senha, notificação)
  3. Ler a caixa de entrada e afirmar sobre o conteúdo do email
  4. Limpar

Com caixas de entrada gerenciadas, cada suite de testes (ou até mesmo cada teste) consegue sua própria caixa de entrada real. Desde que a caixa de entrada suporte IMAP padrão, você lê mensagens usando qualquer biblioteca IMAP — nenhum SDK proprietário necessário.

O fluxo de trabalho de teste parece assim: seu pipeline CI começa, seu código de teste conecta a uma caixa de entrada gerenciada via IMAP, sua aplicação sob teste envia um email (reset de senha, email de boas-vindas, notificação), e seu código de teste consulta a caixa de entrada IMAP até o email chegar. Então você analisa o email, afirma sobre seu conteúdo (assunto correto, corpo correto, links corretos), e segue em frente. Se o email não chegar dentro de um timeout, o teste falha — o que é exatamente o que deveria acontecer se seu pipeline de email estiver quebrado.

O modelo de custo torna isto prático. Dez caixas de entrada de teste permanentes custam $30 no total, uma vez. Compare isto com o $15-35/mês do Mailtrap ou preço por usuário do Mailinator. Ao longo de um ano, a diferença é significativa.

Para um detalhamento de implementação com código em Python e Node.js, veja Como Construir um Ambiente de Testes de Email com uma API de Email Descartável.

Caso de Uso 2: Ambientes de Staging

Ambientes de staging precisam de email que se comporta como produção mas permanece isolado. Os requisitos:

  • Email de saída de staging nunca deveria chegar a usuários reais
  • Desenvolvedores precisam inspecionar o que foi enviado
  • Idealmente, você consegue testar o loop completo de envio-recebimento

Uma caixa de entrada gerenciada por ambiente de staging resolve isto. Configure sua aplicação de staging para enviar via smtp.reusable.email:587 com as credenciais daquela caixa de entrada. Email de saída vai para uma caixa de entrada real que você controla. Você consegue lê-la via IMAP, encaminhá-la, ou apenas checar a interface web.

Porque as credenciais SMTP estão escopo para uma caixa de entrada gerenciada específica, não há risco de email de staging vazar para endereços de produção. A caixa de entrada é isolada por design.

Uma configuração típica para um time executando múltiplos ambientes:

Quatro caixas de entrada, $12 no total, permanentes. Email de cada ambiente é completamente isolado dos outros.

Caso de Uso 3: Caixas de Entrada por Usuário em Seu App SaaS

Alguns produtos precisam dar aos usuários seu próprio endereço de email. Sistemas de tiquetes, plataformas de atendimento ao cliente, ferramentas CRM, aplicativos de gerenciamento de projetos — todos estes se beneficiam de deixar usuários receberem email diretamente no produto.

A abordagem tradicional é executar seu próprio servidor de mail. Postfix, Dovecot, registros DNS, filtragem de spam, monitoramento de entregabilidade, gerenciamento de armazenamento. É um trabalho em tempo integral.

Com Reusable.Email, você cria uma caixa de entrada gerenciada para cada usuário. Eles obtêm credenciais reais de IMAP/SMTP. Sua aplicação conecta via IMAP para puxar mensagens, ou usa webhooks (nível whitelabel) para ser notificado em tempo real. O usuário vê email dentro de seu produto; você nunca toca um servidor de mail.

Em $3 por caixa de entrada, dar a 1.000 usuários seu próprio endereço de email custa $3.000 — uma vez. Sem custos de scaling mensal. Leia a arquitetura completa em Credenciais SMTP & IMAP sob Demanda.

Caso de Uso 4: Construindo um Produto de Temp Mail

Se você está construindo um serviço de email temporário, uma ferramenta de privacidade, ou qualquer produto onde caixas de entrada descartáveis são a funcionalidade principal, o nível whitelabel é projetado para isto.

Por $30/mês você consegue:

  • Caixas de entrada gerenciadas ilimitadas em seu domínio
  • Zero marca Reusable.Email
  • API REST completa para criação e gerenciamento de caixas de entrada
  • Webhooks para eventos de email em tempo real
  • Painel de análise de uso
  • Painel de admin para gerenciar contas e domínios

Seus usuários veem sua marca. A infraestrutura é tratada. Você foca no produto. Veja o guia de serviço de email whitelabel para o detalhamento completo.

Referência de Protocolo: IMAP, SMTP e POP3

Antes de mergulhar em código, aqui está uma referência rápida para conectar a caixas de entrada gerenciadas do Reusable.Email.

Protocolo Host Porta Encriptação Propósito
IMAP imap.reusable.email 993 SSL/TLS Ler email, buscar, gerenciar pastas
SMTP smtp.reusable.email 587 STARTTLS Enviar email
POP3 pop.reusable.email 995 SSL/TLS Baixar email (alternativa para IMAP)

Autenticação para todos os protocolos usa o endereço de email da caixa de entrada como nome de usuário e a senha da caixa de entrada. Sem OAuth2, sem senhas específicas de app, sem chaves de API. Credenciais padrão que funcionam com toda biblioteca de email.

IMAP vs POP3: IMAP mantém mensagens no servidor e suporta pastas, busca e flags. POP3 baixa mensagens e (por padrão) as remove do servidor. Para acesso programático, IMAP é quase sempre a melhor escolha — deixa você buscar, filtrar e gerenciar estado no servidor.

Integração IMAP: Lendo Emails Programaticamente

Toda caixa de entrada gerenciada suporta IMAP em imap.reusable.email:993 com SSL/TLS. Aqui está como conectar e ler mensagens em Python:

import imaplib
import email
from email.header import decode_header

# Conectar ao servidor IMAP do Reusable.Email
imap = imaplib.IMAP4_SSL("imap.reusable.email", 993)
imap.login("[email protected]", "sua-senha")

# Selecionar a caixa de entrada
imap.select("INBOX")

# Buscar todas as mensagens não lidas
status, messages = imap.search(None, "UNSEEN")
message_ids = messages[0].split()

for msg_id in message_ids:
    # Buscar o email
    status, msg_data = imap.fetch(msg_id, "(RFC822)")
    raw_email = msg_data[0][1]

    # Analisar o email
    msg = email.message_from_bytes(raw_email)

    subject, encoding = decode_header(msg["Subject"])[0]
    if isinstance(subject, bytes):
        subject = subject.decode(encoding or "utf-8")

    sender = msg.get("From")
    print(f"De: {sender}")
    print(f"Assunto: {subject}")

    # Obter o corpo do email
    if msg.is_multipart():
        for part in msg.walk():
            content_type = part.get_content_type()
            if content_type == "text/plain":
                body = part.get_payload(decode=True).decode()
                print(f"Corpo: {body}")
                break
    else:
        body = msg.get_payload(decode=True).decode()
        print(f"Corpo: {body}")

imap.logout()

Isto é imaplib padrão — nenhum SDK proprietário, nenhum lock-in de vendedor. Qualquer biblioteca IMAP em qualquer linguagem funciona da mesma forma.

Aguardando Email em Testes

Em testes automatizados, você frequentemente precisa aguardar um email chegar. Aqui está um padrão de polling:

import time

def wait_for_email(imap, subject_contains, timeout=30, interval=2):
    """Consultar caixa de entrada IMAP até um email correspondente ao assunto chegar."""
    start = time.time()
    while time.time() - start < timeout:
        imap.select("INBOX")
        status, messages = imap.search(None, "UNSEEN")
        for msg_id in messages[0].split():
            status, msg_data = imap.fetch(msg_id, "(RFC822)")
            msg = email.message_from_bytes(msg_data[0][1])
            subject = decode_header(msg["Subject"])[0][0]
            if isinstance(subject, bytes):
                subject = subject.decode()
            if subject_contains.lower() in subject.lower():
                return msg
        time.sleep(interval)
    raise TimeoutError(f"Nenhum email com '{subject_contains}' no assunto após {timeout}s")

Para entrega em tempo real sem polling, os webhooks do nível whitelabel empurram eventos para seu endpoint no momento que um email chega. Mais em Como Receber Emails via API.

Integração SMTP: Enviando Emails Programaticamente

Toda caixa de entrada gerenciada também tem acesso SMTP em smtp.reusable.email:587 com STARTTLS. Aqui está um exemplo em Node.js usando nodemailer:

const nodemailer = require("nodemailer");

const transporter = nodemailer.createTransport({
  host: "smtp.reusable.email",
  port: 587,
  secure: false, // STARTTLS
  auth: {
    user: "[email protected]",
    pass: "sua-senha",
  },
});

async function sendTestEmail() {
  const info = await transporter.sendMail({
    from: "[email protected]",
    to: "[email protected]",
    subject: "Email de teste de staging",
    text: "Este é um email de teste enviado via SMTP do Reusable.Email.",
    html: "<p>Este é um <b>email de teste</b> enviado via SMTP do Reusable.Email.</p>",
  });

  console.log("Mensagem enviada:", info.messageId);
}

sendTestEmail();

Porque isto é SMTP padrão, a mesma abordagem funciona com qualquer linguagem: smtplib de Python, Net::SMTP de Ruby, net/smtp de Go, PHPMailer de PHP, Jakarta Mail de Java.

Exemplo SMTP em Python

Para completude, aqui está o equivalente em Python usando smtplib:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

def send_email(to_address, subject, text_body, html_body=None):
    msg = MIMEMultipart("alternative")
    msg["Subject"] = subject
    msg["From"] = "[email protected]"
    msg["To"] = to_address

    msg.attach(MIMEText(text_body, "plain"))
    if html_body:
        msg.attach(MIMEText(html_body, "html"))

    with smtplib.SMTP("smtp.reusable.email", 587) as server:
        server.starttls()
        server.login("[email protected]", "sua-senha")
        server.send_message(msg)

send_email(
    "[email protected]",
    "Confirmação de Pedido",
    "Seu pedido #1234 foi confirmado.",
    "<h1>Pedido Confirmado</h1><p>Seu pedido #1234 foi confirmado.</p>",
)

Enviando com Anexos

Adicionar anexos segue a abordagem MIME padrão:

from email.mime.base import MIMEBase
from email import encoders

def send_with_attachment(to_address, subject, body, file_path):
    msg = MIMEMultipart()
    msg["Subject"] = subject
    msg["From"] = "[email protected]"
    msg["To"] = to_address
    msg.attach(MIMEText(body, "plain"))

    with open(file_path, "rb") as f:
        attachment = MIMEBase("application", "octet-stream")
        attachment.set_payload(f.read())
        encoders.encode_base64(attachment)
        attachment.add_header(
            "Content-Disposition",
            f"attachment; filename={file_path.split('/')[-1]}",
        )
        msg.attach(attachment)

    with smtplib.SMTP("smtp.reusable.email", 587) as server:
        server.starttls()
        server.login("[email protected]", "sua-senha")
        server.send_message(msg)

Nada aqui é específico do Reusable.Email. Este é o mesmo código que você escreveria para qualquer servidor SMTP. Esse é o ponto — nenhum lock-in de vendedor, nenhum SDK proprietário para aprender e manter.

Webhooks: Eventos de Email em Tempo Real

O nível whitelabel suporta webhooks que notificam sua aplicação quando eventos de email ocorrem. Quando um email chega em qualquer caixa de entrada gerenciada em seu domínio, Reusable.Email envia um POST HTTP para seu endpoint configurado com os detalhes da mensagem.

Esta é a abordagem para produtos que precisam de processamento de email em tempo real — sem atraso de polling, sem conexões IMAP persistentes, sem mensagens perdidas.

O payload típico de webhook inclui:

  • Remetente, destinatário, assunto
  • Corpo em texto simples e HTML
  • Metadados de anexo
  • Timestamp de entrega

Seu endpoint recebe o evento, o processa (extrair códigos de verificação, rotear para o usuário correto, disparar lógica de aplicação), e responde com status 200.

Para uma comparação completa de polling IMAP vs webhooks vs API polling, veja Como Receber Emails via API.

Considerações de Segurança

Quando usar credenciais de email em desenvolvimento, testes e produção, práticas de segurança padrão se aplicam:

Armazene credenciais em variáveis de ambiente ou um gerenciador de secrets. Nunca codifique senhas de caixa de entrada em código fonte. Use o gerenciamento de secrets da sua plataforma CI (segredos GitHub Actions, variáveis CI GitLab, etc.) para pipelines automatizados.

Use caixas de entrada separadas por ambiente. Não compartilhe a mesma caixa de entrada gerenciada entre desenvolvimento, staging e produção. Isolamento previne contaminação entre ambientes e limita o raio de explosão de credenciais comprometidas.

Rotacione senhas se comprometidas. Se uma senha de caixa de entrada for acidentalmente commitada para um repositório público, mude-a imediatamente através da interface do Reusable.Email.

TLS em qualquer lugar. Tanto IMAP (porta 993, SSL/TLS) e SMTP (porta 587, STARTTLS) usam conexões encriptadas. Seu conteúdo de email e credenciais nunca são transmitidos em texto simples.

Modelo de Preços para Desenvolvedores

A maioria de serviços de testes de email e API cobram taxas mensais por usuário. Aqui está como Reusable.Email se compara:

Serviço Modelo de Preço Custo para 10 Caixas/Ano
Reusable.Email $3/caixa uma vez $30 (uma vez)
Mailtrap $15-35/mês $180-420/ano
Mailinator Assinatura por usuário $200+/ano
Mailosaur Assinatura por usuário $300+/ano

O preço uma-vez significa que seus custos de infraestrutura de email são previsíveis e não escalam com o tamanho do time. Uma startup e um time de 50 pessoas pagam o mesmo por caixa de entrada.

Para times que precisam da infraestrutura completa de API e webhook, o nível whitelabel em $30/mês inclui caixas de entrada gerenciadas ilimitadas — o custo por caixa cai para zero uma vez que você está naquele plano.

FAQ

Como criei caixas de entrada programaticamente?

No nível whitelabel, você usa a API REST para criar caixas de entrada gerenciadas. Cada caixa de entrada consegue suas próprias credenciais de IMAP/SMTP. Para uso em escala menor, você consegue criar caixas de entrada gerenciadas através da interface web do Reusable.Email e usar as credenciais em seu código.

Quais protocolos o Reusable.Email suporta?

Todas as caixas de entrada gerenciadas suportam IMAP (porta 993, SSL/TLS), SMTP (porta 587, STARTTLS), e POP3. Estes são protocolos padrão que funcionam com qualquer biblioteca de email ou cliente.

Posso receber emails via webhook?

Sim, no nível whitelabel. Webhooks enviam um POST HTTP para seu endpoint quando email chega em qualquer caixa de entrada gerenciada em seu domínio. Para outros níveis, use polling IMAP. Veja o guia de API de recebimento de email para detalhes de implementação.

Quanto custa criar 100 caixas de entrada de teste?

$300, uma vez. Isto é 100 caixas de entrada gerenciadas a $3 cada. Sem taxas mensais, sem renovação. Se você precisar de mais que ~10 caixas de entrada, o nível whitelabel em $30/mês inclui criação de caixa de entrada ilimitada via API, o que fica mais barato em escala.

Há uma API oficial?

O nível whitelabel inclui uma API REST completa para criar e gerenciar caixas de entrada, domínios e contas. Para o nível de caixa de entrada gerenciada padrão, você interage através de protocolos IMAP/SMTP padrão — que são eles mesmos uma API que toda linguagem de programação suporta de fora da caixa.

Posso usar Reusable.Email com minha biblioteca de email existente?

Sim. Qualquer biblioteca que suporte IMAP e SMTP funciona de fora da caixa. Isto inclui imaplib e smtplib de Python, nodemailer e imapflow de Node.js, net/imap e net/smtp de Ruby, net/smtp de Go, PHPMailer de PHP, Jakarta Mail de Java, e muitos mais. Nenhum SDK para instalar.

Quanto tempo email é retido?

Caixas de entrada gerenciadas retêm email por 365 dias. Após isto, mensagens são automaticamente apagadas. Se você precisar de retenção mais longa, puxe mensagens para seu próprio armazenamento via IMAP.

Posso usar um domínio customizado?

Sim. Domínios customizados ($10/ano) deixam você criar caixas de entrada em [email protected]. O nível whitelabel inclui suporte de domínio customizado com MX, SPF, DKIM e DMARC auto-configurados.

Conclusão

Email no desenvolvimento não precisa ser complicado ou caro. Protocolos padrão — IMAP e SMTP — têm sido a espinha dorsal do email por décadas, e funcionam com toda linguagem e framework.

Reusable.Email dá aos desenvolvedores caixas de entrada reais com credenciais reais a um custo uma-vez. Sem limitações de sandbox, sem treadmill de assinatura, sem SDKs proprietários específicos de vendedor. Para times construindo produtos em email, o nível whitelabel adiciona a camada de API e webhooks necessários para uso de produção.

Se você está escrevendo testes, isolando staging, dando aos usuários sua própria caixa de entrada, ou construindo o próximo serviço de temp mail — a infraestrutura é a mesma: criar uma caixa de entrada, obter credenciais, conectar com protocolos padrão.

Try it free

Get a disposable inbox in seconds

No sign-up required. Just visit an address and it's live. Works with any domain on reusable.email.

Open your inbox →