segunda-feira, 4 de março de 2013

C# - Função para validar um E-mail



















É comum criarmos formulários de contato, cadastros de clientes, e até mesmo cadastro de newsletter e os usuários inserirem um e-mail inválido. Isso acaba sendo um problema, pois se for em um formulário de contato, você não tem como responder, se for em um cadastro de newsletter não terá utilidade nenhuma.

Tem uma função bem simples em C# para que possamos evitar que esse problema ocorra. Você simplesmente passa uma string com o e-mail a ser validade e a função retorna se é válido (true) ou não (false).

//Função para validar Email
        public static bool validarEmail(string Email)
        {
            bool ValidEmail = false;
            int indexArr = Email.IndexOf("@");
            if (indexArr > 0)
            {
                if (Email.IndexOf("@", indexArr + 1) > 0)
                {
                    return ValidEmail;
                }

                int indexDot = Email.IndexOf(".", indexArr);
                if (indexDot - 1 > indexArr)
                {
                    if (indexDot + 1 < Email.Length)
                    {
                        string indexDot2 = Email.Substring(indexDot + 1, 1);
                        if (indexDot2 != ".")
                        {
                            ValidEmail = true;
                        }
                    }
                }
            }
            return ValidEmail;
        }
*** Post atualizado em 06/08/2015. Conforme mencionado por um leitor anônimo, se fosse informado dois arrobas (@@), o e-mail era válidado. No mesmo comentário, o leitor Douglas Lima já apresentou a solução, que já esta atualizada no trecho de código acima.
Ainda no mesmo post, o leitor Wesley Reis sugeriu uma expressão regular para fazermos a validação. Estarei criando um novo post utilizando Expressões Regulares (RegEx) e colocando também o link aqui.
C# - Função para validar um E-mail com Expressão Regular (RegEx)

13 comentários:

  1. Vlw Fabio,

    foi muito Util.

    Att.

    Fabio Rattis

    ResponderExcluir
  2. Se você colocar conta@@dominio.com ele diz que é um email válido e na verdade não é

    ResponderExcluir
    Respostas
    1. Adicione o trecho a baixo após este trecho "if (indexArr > 0){":

      if (Email.IndexOf("@", indexArr + 1) > 0)
      {
      return ValidEmail;
      }

      Excluir
    2. Olá Douglas Lima, boa tarde! Fiz uma atualização no Post do Blog, adicionando o trecho que você sugeriu. Muito obrigado pela sua colaboração.

      Excluir
  3. Veja Este em Java.
    https://gist.github.com/wcreis/4d73ce26863ef335f6d0

    ResponderExcluir
    Respostas
    1. Olá Wesley, boa tarde. Estarei fazendo um novo Post sobre uma função com Expressão Regular, utilizando sua dica. Obrigado, e continue participando.

      Excluir
  4. Esse aqui valida e-mails com acentuação?

    ResponderExcluir
  5. Mas como eu ativo? antes de cadastrar no banco de dados

    ResponderExcluir
    Respostas
    1. Olá amigo! Isso é uma função em C#, a validação será feita a nível de aplicação, e não Banco de Dados. Você deverá, no momento de validar seus dados, chamar a função, e se ela retornar TRUE o e-mail é válido, se FALSE, o e-mail é inválido, então basta não continuar seu processo de gravação no BD.

      Excluir
    2. Obrigado, mas aparece o seguinte erro " The name 'Email' does not exist in the current context".

      Excluir
    3. private void txtemail_Leave(object sender, EventArgs e)
      {
      if (ValidarEmail(txtemail.Text))
      {

      cbniveldeAcesso.Focus();

      }
      else
      {
      MessageBox.Show("Formato de Email invalido","Formato Invaalido",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
      txtemail.Text = "";
      txtemail.Focus();
      }
      }

      Excluir
  6. Quando acontece isso "fulano@fulano.comm" a função valida.Teria como evitar problema desse tipo ?

    ResponderExcluir