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
- Fluxos com serviços de terceiros: testar o cadastro numa plataforma externa integrada ao seu produto, em que o código vai para o endereço informado.
- Testes de ponta a ponta em produção: quando o domínio de teste interno não é aceito pelo serviço.
- Contas de teste para clientes ou projetos separados, em que cada execução precisa de um endereço diferente.
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": ... }.
- Liste os serviços:
GET /v1/servicesdevolve códigos, preços, estoque e as opções de iCloud. Use para descobrir o código de cada serviço, comogitpara o GitHub. - Crie o pedido:
POST /v1/orderscom{ "service": "git", "domain": "gmail.com" }. O campodomainaceitagmail.com(padrão) ouicloud.com, equantitypermite até 200 caixas por pedido. A resposta é uma lista de pedidos, cada um comorderId,email,status,otp,codeDeadlineAterentExpiresAt. - Consulte o resultado:
GET /v1/orders/{orderId}a cada 3 a 5 segundos. Os códigos chegam emotp, do mais antigo para o mais novo; use o último. - Cancele se precisar:
POST /v1/orders/{orderId}/canceldevolve 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
- Trate o prazo de espera como resultado esperado, não como falha do teste: sem código no prazo, o pedido é reembolsado sozinho.
- Cancele pedidos que não vai usar, para receber o valor de volta na hora.
- Não consulte mais rápido que a cada 3 segundos: isso não acelera o e-mail e só consome o limite de chamadas.
- Guarde a chave em variável de ambiente e nunca no repositório.
- Registre
emaileorderIdno log do teste, para investigar falhas depois.
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.
