E-mail para testar cadastros: Gmail alugado e API para QA

Para testar o cadastro do seu próprio sistema, um servidor de e-mail de teste local resolve: ele captura as mensagens que a sua aplicação envia. O problema aparece quando o teste passa por um serviço de terceiros, que manda o código para um domínio real e muitas vezes recusa endereços de e-mail temporário. Nesse caso, você precisa de uma caixa real, e a OTPGmail aluga caixas @gmail.com e @icloud.com para isso, com o código disponível no painel ou pela API REST.

Este guia mostra os dois fluxos, manual e automatizado, com um exemplo em Python, os erros mais comuns e boas práticas para equipes de QA. O código de exemplo usa identificadores em inglês, como é comum em código.

Quando o teste precisa de uma caixa real

Para tudo o que acontece só dentro do seu sistema, prefira o servidor de teste local: é gratuito e mais rápido. A caixa alugada entra quando a mensagem precisa sair para a internet de verdade.

Fluxo manual no painel

Para testes pontuais, o painel da OTPGmail resolve sem código: escolha o serviço e o tipo de caixa no painel de aluguel, cole o endereço no formulário e leia o código na página do pedido. Se nada chegar no prazo de espera, de até 25 minutos, o pedido é cancelado e 100% do valor volta ao saldo. O fluxo completo está em como a OTPGmail funciona.

Fluxo pela API

A API REST da OTPGmail usa uma chave pessoal, gerada na página de conta (começa com og_). Envie no cabeçalho Authorization: Bearer <chave> ou, onde não der para usar cabeçalhos, no parâmetro ?api_key=. As respostas vêm no formato { "success": true, "data": ... }.

  1. Liste os serviços: GET /v1/services devolve códigos, preços, estoque e as opções de iCloud. Use para descobrir o código de cada serviço, como git para o GitHub.
  2. Crie o pedido: POST /v1/orders com { "service": "git", "domain": "gmail.com" }. O campo domain aceita gmail.com (padrão) ou icloud.com, e quantity permite até 200 caixas por pedido. A resposta é uma lista de pedidos, cada um com orderId, email, status, otp, codeDeadlineAt e rentExpiresAt.
  3. Consulte o resultado: GET /v1/orders/{orderId} a cada 3 a 5 segundos. Os códigos chegam em otp, do mais antigo para o mais novo; use o último.
  4. Cancele se precisar: POST /v1/orders/{orderId}/cancel devolve 100% enquanto o pedido não recebeu código.

Um mesmo serviço pode ter várias fontes de caixas, cada uma com preço, estoque e regras próprias (o array offers[] de GET /v1/services). Sem o campo warehouse, o pedido vai para a fonte padrão do serviço; com "warehouse": 99, a API tenta da fonte mais barata para a mais cara até encontrar estoque e, se todas estiverem esgotadas, responde ALL_WAREHOUSES_EXHAUSTED sem cobrar nada.

Envie um cabeçalho Idempotency-Key com um UUID novo em cada pedido. Se a requisição cair por tempo esgotado, repetir com a mesma chave devolve o pedido já criado, sem alugar outra caixa. Use um tempo limite de pelo menos 15 segundos no cliente. A referência completa está na documentação da API.

Exemplo em Python

import os, time, uuid, requests

BASE = os.environ["OTPGMAIL_BASE"]  # site address, with https
HEADERS = {"Authorization": "Bearer " + os.environ["OTPGMAIL_API_KEY"]}

def rent(service, domain="gmail.com"):
    r = requests.post(BASE + "/v1/orders",
                      json={"service": service, "domain": domain},
                      headers={**HEADERS, "Idempotency-Key": str(uuid.uuid4())},
                      timeout=30)
    body = r.json()
    if not body.get("success"):
        raise RuntimeError(body["error"]["code"])
    return body["data"][0]  # data is a list of orders

def wait_code(order_id, max_wait=600, interval=4):
    deadline = time.time() + max_wait
    while time.time() < deadline:
        order = requests.get(BASE + "/v1/orders/" + order_id,
                             headers=HEADERS, timeout=30).json()["data"]
        if order["otp"]:
            return order["otp"][-1]["code"]
        if order["status"] == "cancelled":
            return None
        time.sleep(interval)
    requests.post(BASE + "/v1/orders/" + order_id + "/cancel",
                  headers=HEADERS, timeout=30)  # refund if no code yet
    return None

order = rent("git")
print("Email:", order["email"])
print("Code:", wait_code(order["orderId"]))

Erros mais comuns

Código de erro O que significa O que fazer
NO_MAILS_AVAILABLE / OUT_OF_STOCK / ALL_WAREHOUSES_EXHAUSTED Sem caixas para esse serviço agora; nada foi cobrado Tente o outro tipo de caixa, "warehouse": 99 ou mais tarde
DOMAIN_UNAVAILABLE O serviço não tem esse tipo de caixa no momento Troque icloud.com por gmail.com, ou o contrário
INSUFFICIENT_BALANCE Saldo insuficiente Recarregue o saldo antes da execução
ORDER_NOT_CANCELLABLE O pedido já recebeu código Normal: pedido com código não é cancelado
RATE_LIMITED Chamadas demais Respeite o limite padrão de 20 chamadas por segundo e 900 por minuto por chave
VALIDATION_ERROR Corpo da requisição inválido Confira o código do serviço e os campos

Boas práticas para QA

Para muitas caixas de uma vez, existe o aluguel em lote, comprado pelo site (nos lotes de Gmail, cada caixa tem um link de códigos para scripts); ele não reembolsa caixas sem código, como explicam o guia de vários e-mails para cadastros e a política de reembolso e garantia. Use as caixas só em testes legítimos e siga os termos de cada plataforma testada; a OTPGmail não se responsabiliza por uso indevido.

Perguntas frequentes

Preciso de uma conta separada para usar a API?

Não. A API usa a mesma conta e o mesmo saldo do painel. A chave fica na página de conta e pode ser gerada de novo a qualquer momento.

A API cobra preços diferentes do painel?

Não. O preço de cada aluguel é o mesmo nos dois, e as regras de prazo e reembolso também.

Quantas caixas posso alugar ao mesmo tempo?

Até 200 caixas por pedido e até 500 pedidos aguardando código ao mesmo tempo, respeitando o limite padrão de 20 chamadas por segundo e 900 por minuto por chave.

Recebo mais de um código na mesma caixa?

Se o serviço enviar mais de um, os novos códigos entram no fim da lista otp do mesmo pedido, sem custo extra dentro do período do pedido. Muitos serviços enviam só um código por caixa.

Guias relacionados

Receba seu código de verificação agora

O cadastro não custa nada e você só paga quando uma caixa é entregue. Sem código em até 25 minutos, 100% do valor volta ao saldo automaticamente.

Não encontrou o serviço de que você precisa? Use o botão Adicionar serviço na página de aluguel para pedir a inclusão; avaliamos e adicionamos se a nossa infraestrutura permitir.

Precisa de uma conta Gmail para fazer login, e não só de um código? Veja como comprar uma conta Gmail de curta duração · Reembolso e garantia