Guias

Pontos e aliases com + no Gmail: como pegar cadastros duplicados

j.doe+7@gmail.com e jdoe@gmail.com são a mesma caixa. Como funciona o endereçamento do Gmail, uma função de normalização em JavaScript e Python e os casos de borda que dão problema.

6 min de leitura · Atualizado em 2026-10-31 · Attrelix

Uma caixa, endereços infinitos

O Gmail tem duas regras de endereçamento que tornam trivial criar muitas contas a partir de uma única caixa:

  • Pontos são ignorados. Em endereços @gmail.com, jane.doe, janedoe e j.a.n.e.d.o.e são a mesma caixa. Um nome de dez letras tem centenas de variações com pontos.
  • Tudo depois de um sinal de mais é ignorado. janedoe+teste1@gmail.com, janedoe+teste2@gmail.com e assim por diante entregam em janedoe@gmail.com. O número de variações é ilimitado.

Além disso, @googlemail.com é o mesmo serviço que @gmail.com. Toda variação passa na verificação de e-mail, porque o e-mail de confirmação chega de verdade. Para o seu formulário de cadastro, são todos usuários diferentes e novinhos.

O endereçamento com mais não é exclusivo do Gmail: Fastmail e Proton Mail também suportam, assim como muitos servidores de e-mail de empresas. Já ignorar pontos é coisa específica do Gmail pessoal.

Normalize e depois compare

A solução é guardar uma forma normalizada de cada endereço ao lado do original e comparar os cadastros novos com ela. Mantenha o original para enviar e-mails — foi o que o usuário digitou, e algumas pessoas usam a tag de mais para filtrar mensagens.

// JavaScript
function normalizeEmail(input) {
  const raw = input.trim().toLowerCase();
  const at = raw.lastIndexOf("@");
  if (at < 1) return null;
  let local = raw.slice(0, at);
  let domain = raw.slice(at + 1).replace(/\.$/, "");
  if (domain === "googlemail.com") domain = "gmail.com";
  const plus = local.indexOf("+");
  if (plus > 0) local = local.slice(0, plus);
  if (domain === "gmail.com") local = local.replaceAll(".", "");
  return `${local}@${domain}`;
}

normalizeEmail("J.Doe+trial7@GoogleMail.com"); // "jdoe@gmail.com"
# Python
def normalize_email(value: str) -> str | None:
    raw = value.strip().lower()
    local, sep, domain = raw.rpartition("@")
    if not sep or not local:
        return None
    domain = domain.rstrip(".")
    if domain == "googlemail.com":
        domain = "gmail.com"
    base = local.split("+", 1)[0] or local
    if domain == "gmail.com":
        base = base.replace(".", "")
    return f"{base}@{domain}"

Depois adicione uma coluna e um índice, e consulte no cadastro:

ALTER TABLE users ADD COLUMN email_normalized text;
CREATE INDEX users_email_normalized ON users (email_normalized);

-- no cadastro
SELECT count(*) FROM users WHERE email_normalized = $1;

Casos de borda que dão problema

  • Não tire pontos fora do Gmail pessoal. Na maioria dos provedores, e nos domínios de empresa do Google Workspace, jane.doe@ e janedoe@ são pessoas diferentes. Tirar os pontos ali junta desconhecidos.
  • Tirar o mais é uma heurística nos outros provedores. Em quase todos, a tag de mais é um alias, mas um servidor de e-mail pode tratar + como um caractere comum. Trate uma coincidência fora do Gmail como sinal, não como prova.
  • Não recuse a tag de mais em si. Muita gente cuidadosa usa nome+servico@gmail.com em todo site onde se cadastra. Tag de mais numa caixa nova é normal; tag de mais numa caixa que já tem conta é o sinal.
  • Passe para minúsculas antes de comparar, e tire espaços e pontos finais. Na prática, os provedores tratam a parte local sem diferenciar maiúsculas.
  • Outros provedores têm seus próprios esquemas de alias (endereços descartáveis do Yahoo, aliases do Outlook na mesma conta). Esses não se pegam com normalização — é aí que entram sinais de dispositivo e rede.

O que fazer quando bate

Uma coincidência normalizada significa que a conta nova recebe e-mail numa caixa que já tem conta com você. Geralmente a resposta certa não é um erro, e sim um empurrão: “Você já tem uma conta com este e-mail — quer entrar?”. Para testes e créditos grátis, também é um forte motivo para não dar o teste ou mandar o cadastro para revisão. Veja Como evitar abuso do teste grátis para um fluxo de decisão completo.

Como o Attrelix faz

Toda checagem normaliza o endereço (pontos do Gmail, tags de mais, googlemail.com e os domínios do Proton), procura contas existentes com a mesma caixa e adiciona o motivo alias_of_existing quando encontra. O endereço original nunca é alterado nos seus dados, e as contas ligadas vêm na resposta para você ver o grupo inteiro.

Resumo

  • O Gmail ignora pontos e tags de mais; muitos provedores ignoram tags de mais.
  • Guarde um endereço normalizado ao lado do original e indexe.
  • Tire pontos só no Gmail pessoal; trate as outras coincidências como sinais.
  • Quando bater, sugira entrar na conta e não dê um segundo teste.

Mais guias