Ferramentas / Validador de e-mail

Validador de e-mail

Digite ou cole e-mails, um por linha. Mostramos na hora se o formato é válido e, se não for, o que está errado.

    Processamento local: nada do que você digita sai do seu navegador.

    Como usar

    Digite um ou mais e-mails, um por linha. A verificação acontece enquanto você digita e cada linha mostra o motivo da falha: falta de @, ponto no começo ou no fim do usuário, dois pontos seguidos, caracteres não permitidos, domínio sem ponto ou com hífen no começo, extensão curta demais, tamanhos acima dos limites (64 caracteres no usuário, 254 no total).

    O que a validação garante

    Ela confere apenas a sintaxe, seguindo uma versão prática das regras de RFC 5321/5322 e do HTML5. Não consulta o servidor de e-mail, então não diz se a caixa postal existe nem se aceita mensagens. Para ter certeza, envie um e-mail de confirmação ao usuário. Quando o domínio parece um erro de digitação de um provedor popular (gmial.com, hotmial.com), mostramos uma sugestão, mas ela é só um aviso e não torna o e-mail inválido.

    Como implementar em código

    Exemplos prontos para usar no seu projeto.

    // Validação prática de formato (não verifica se a caixa existe)
    const RE = /^[A-Za-z0-9.!#$%&'*+\/=?^_{|}~-]+@[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?(?:\.[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?)+$/;
    
    function emailValido(email) {
      return email.length <= 254 && RE.test(email) && !email.includes('..');
    }
    
    console.log(emailValido('contato@vcinova.com.br')); // true
    console.log(emailValido('ana..s@exemplo.com'));      // false
    console.log(emailValido('sem-arroba.com'));          // false

    No HTML, input type="email" já aplica uma regra parecida no navegador.

    import re
    
    # Validação prática de formato (não verifica se a caixa existe)
    RE = re.compile(r"^[A-Za-z0-9.!#$%&'*+/=?^_{|}~-]+@[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?(?:\.[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?)+$")
    
    def email_valido(email: str) -> bool:
        return len(email) <= 254 and ".." not in email and RE.match(email) is not None
    
    print(email_valido("contato@vcinova.com.br"))  # True
    print(email_valido("ana..s@exemplo.com"))       # False
    print(email_valido("sem-arroba.com"))           # False
    package main
    
    import (
    	"fmt"
    	"regexp"
    	"strings"
    )
    
    // Validação prática de formato (não verifica se a caixa existe)
    var re = regexp.MustCompile(`^[A-Za-z0-9.!#$%&'*+/=?^_{|}~-]+@[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?(?:\.[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?)+$`)
    
    func emailValido(email string) bool {
    	return len(email) <= 254 && !strings.Contains(email, "..") && re.MatchString(email)
    }
    
    func main() {
    	fmt.Println(emailValido("contato@vcinova.com.br")) // true
    	fmt.Println(emailValido("ana..s@exemplo.com"))      // false
    	fmt.Println(emailValido("sem-arroba.com"))          // false
    }

    Também existe net/mail.ParseAddress, mas ele aceita formatos como "Nome <a@b.com>".

    // Validação prática de formato (não verifica se a caixa existe)
    final re = RegExp(
        r"^[A-Za-z0-9.!#$%&'*+/=?^_{|}~-]+@[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?(?:\.[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?)+$");
    
    bool emailValido(String email) =>
        email.length <= 254 && !email.contains('..') && re.hasMatch(email);
    
    void main() {
      print(emailValido('contato@vcinova.com.br')); // true
      print(emailValido('ana..s@exemplo.com'));      // false
      print(emailValido('sem-arroba.com'));          // false
    }
    import java.util.regex.Pattern;
    
    public class EmailValidator {
        // Validação prática de formato (não verifica se a caixa existe)
        private static final Pattern RE = Pattern.compile(
            "^[A-Za-z0-9.!#$%&'*+/=?^_{|}~-]+@[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?(?:\\.[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?)+$");
    
        static boolean emailValido(String email) {
            return email.length() <= 254 && !email.contains("..") && RE.matcher(email).matches();
        }
    
        public static void main(String[] args) {
            System.out.println(emailValido("contato@vcinova.com.br")); // true
            System.out.println(emailValido("ana..s@exemplo.com"));      // false
            System.out.println(emailValido("sem-arroba.com"));          // false
        }
    }
    <?php
    // filter_var já aplica uma regra de formato razoável (não verifica se a caixa existe)
    function emailValido(string $email): bool {
        return strlen($email) <= 254
            && filter_var($email, FILTER_VALIDATE_EMAIL) !== false;
    }
    
    var_dump(emailValido('contato@vcinova.com.br')); // bool(true)
    var_dump(emailValido('ana..s@exemplo.com'));      // bool(false)
    var_dump(emailValido('sem-arroba.com'));          // bool(false)

    FILTER_VALIDATE_EMAIL aceita domínio sem ponto em algumas versões (ex.: a@localhost); confira com strpos($email, '.') se precisar exigir.

    using System;
    using System.Text.RegularExpressions;
    
    class Program
    {
        // Validação prática de formato (não verifica se a caixa existe)
        static readonly Regex Re = new Regex(
            @"^[A-Za-z0-9.!#$%&'*+/=?^_{|}~-]+@[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?(?:\.[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?)+$");
    
        static bool EmailValido(string email) =>
            email.Length <= 254 && !email.Contains("..") && Re.IsMatch(email);
    
        static void Main()
        {
            Console.WriteLine(EmailValido("contato@vcinova.com.br")); // True
            Console.WriteLine(EmailValido("ana..s@exemplo.com"));      // False
            Console.WriteLine(EmailValido("sem-arroba.com"));          // False
        }
    }

    Evite MailAddress para validar: ele aceita formas como "Nome <a@b.com>" e comentários.

    Perguntas frequentes

    Esta ferramenta confirma que o e-mail existe?

    Não. Ela só confere o formato. Para saber se a caixa existe é preciso enviar uma mensagem de confirmação, pois consultar o servidor sem enviar é pouco confiável e muitos provedores bloqueiam.

    Por que um e-mail com acento é inválido aqui?

    A sintaxe tradicional só aceita caracteres ASCII. Existe o padrão de e-mail internacionalizado (EAI), mas poucos servidores o suportam, então a ferramenta o trata como inválido.

    Posso usar apenas uma regex para validar e-mails?

    Para o formato básico sim, como nos exemplos de código abaixo. Mas a regex não explica o motivo do erro nem detecta typos de domínio, e nunca substitui a confirmação por e-mail.

    Veja também

    Precisa de um sistema ou app sob medida?

    A VcInova desenvolve software, aplicativos e integrações para empresas de todo o Brasil.

    Fale com a VcInova