none
Como verificar se um e-mail é valido antes de enviar ? RRS feed

  • Pergunta

  • Como verificar se um e-mail é valido antes de enviar ?

    if (remetente = valido)

    {

       EnviaEmail()

    }

    else

    {

       Msg "E-mail" + remetente + "não é valido".

    }

    terça-feira, 18 de agosto de 2015 00:14

Respostas

  • De acordo com sua necessidade sua arquitetura está errada. 

    De qualquer maneira, você pode utilizar Regex para validar seu e-mail como eu disse.

    Veja o exemplo:

      static void PreparaMensagem()
            {
                foreach (var endereco  in emails)
                {
                    if (EmailValido(endereco))
                    {
                        try
                        {
                            mailMessage.To.Add(new MailAddress(endereco));
                        }
                        catch (ArgumentNullException ex){}
                        catch (ArgumentException ex){}
                        catch (FormatException ex){}
    
                    }
                    else
                    {
                        RegistraErro(endereco);
                    }
                }
            }
    
            static bool EmailValido (string email)
            {
                return Regex.IsMatch(email,
                    @"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
                    @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$",
                    RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250));
            }
    
            void RegistraErro(string email)
            {
                throw new NotImplementedException();
            }


    ROBERTOSLJUNIOR


    • Editado robertosljunior terça-feira, 18 de agosto de 2015 17:32
    • Marcado como Resposta Marcos SJ terça-feira, 18 de agosto de 2015 19:01
    terça-feira, 18 de agosto de 2015 17:31

Todas as Respostas

  • Boa Noite, você diz, fazer a validação dele como um email, ou verificar se o email existe?

    MCP - MCSD Se a Resposta foi util, por favor marque como Valida assim esta contribuindo para gratificar toda a ajuda de nossos colegas. Paulo Caleffi

    terça-feira, 18 de agosto de 2015 02:05
  • O construtor da classe MailAddress fornece uma válidação básica para os endereços de e-mail.

    try
    {
       message.To.Add(new MailAddress(email.Destinatario));
    }
    catch (ArgumentNullException ex) { }
    catch (ArgumentException ex) { }
    catch (FormatException ex) { }

    Se quiser fazer uma validação mais completa utilize Regex.


    ROBERTOSLJUNIOR

    terça-feira, 18 de agosto de 2015 03:59
  • Bom dia Roberto

    Desculpe mas não entendi seu código.

    Como ficaria então ?

    Eu quero apenas assim

    Se for valido enviaemail

    Se não for segue para o próximo e-mail

    Segue meu código:

    mailMessage.From = newMailAddress(remetente,"ASSINATURAS ARTSIM");

    //destinatarios do e-mail, para incluir mais de um basta separar por ponto e virgula///

    varlistaEmail = destinatario;

    varemails = listaEmail.Split(';');

    foreach(varendereco inemails)

    {

    mailMessage.To.Add(newMailAddress(endereco));

    }

    Fico no aguardo

    Obrigado.

    terça-feira, 18 de agosto de 2015 08:43
  • Bom dia pessoal

    Coloquei dessa forma:

    mailMessage.From = newMailAddress(remetente,"ASSINATURAS ARTSIM");

    //destinatarios do e-mail, para incluir mais de um basta separar por ponto e virgula///

    varlistaEmail = destinatario;

    varemails = listaEmail.Split(';');

    foreach(varendereco inemails)

    {

    //mailMessage.To.Add(new MailAddress(endereco));

    try

    {

    mailMessage.To.Add(newMailAddress(endereco));

    }

    catch(ArgumentNullExceptionex) { }

    catch(ArgumentExceptionex) { }

    catch(FormatExceptionex) { }

    }

    Porem quando encontra um e-mail incorreto da esse erro:

    Erro de Servidor no Aplicativo '/'.

    Parâmetro do comando não implementado. A resposta do servidor foi: 5.5.2 <descontinuados-overstock@descontinuados-overstock>: Recipient address rejected: need fully-qualified address

    Descrição: Ocorreu uma exceção sem tratamento durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código. 

    Detalhes da Exceção: System.Net.Mail.SmtpException: Parâmetro do comando não implementado. A resposta do servidor foi: 5.5.2 <descontinuados-overstock@descontinuados-overstock>: Recipient address rejected: need fully-qualified address

    Erro de Origem: 
    Linha 584:                smtpClient.Port = 587;
    Linha 585:                
    Linha 586:                smtpClient.Send(mailMessage);
    Linha 587:                //return true;
    Linha 588:            //objStreamReader.Close();

    Arquivo de Origem: c:\ARTSIM\SGSIM\ControledeUsuarios\Mailing.aspx.cs    Linha: 586 

    Rastreamento de Pilha: 
    [SmtpException: Parâmetro do comando não implementado. A resposta do servidor foi: 5.5.2 <descontinuados-overstock@descontinuados-overstock>: Recipient address rejected: need fully-qualified address]
       System.Net.Mail.RecipientCommand.CheckResponse(SmtpStatusCode statusCode, String response) +1840314
       System.Net.Mail.SmtpTransport.SendMail(MailAddress sender, MailAddressCollection recipients, String deliveryNotify, Boolean allowUnicode, SmtpFailedRecipientException& exception) +236
       System.Net.Mail.SmtpClient.Send(MailMessage message) +1867
       ControledeUsuarios.Mailing.EnviarEmail(String assunto, String destinatario) in c:\ARTSIM\SGSIM\ControledeUsuarios\Mailing.aspx.cs:586
       ControledeUsuarios.Mailing.btnEnviarEmail_Click(Object sender, EventArgs e) in c:\ARTSIM\SGSIM\ControledeUsuarios\Mailing.aspx.cs:607
       System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9671538
       System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +108
       System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +12
       System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +15
       System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1639
    


    Informações sobre a Versão: Microsoft .NET Framework Versão:4.0.30319; Versão do ASP.NET:4.6.79.0

    terça-feira, 18 de agosto de 2015 12:55
  • Use expressão regular.

    Referencia: https://msdn.microsoft.com/en-us/library/01escwtf.aspx



    ROBERTOSLJUNIOR

    terça-feira, 18 de agosto de 2015 14:50
  • Pessoal

    Eu apenas quero que mostre os e-mails que estão errados pelo próprio erro no asp.net.

    usando o try mesmo. Porem eu quero que prossiga com o processo e não trave e para o sistema.

    Tipo assim:

    Try

    {

    EnviarEmail()

    }

    catch

    {

       \\Se for e-mail invalido mostre o e-mail e continue enviando.

    }

    Alguém pode me ajudar ?

    Obrigado.

    terça-feira, 18 de agosto de 2015 17:18
  • De acordo com sua necessidade sua arquitetura está errada. 

    De qualquer maneira, você pode utilizar Regex para validar seu e-mail como eu disse.

    Veja o exemplo:

      static void PreparaMensagem()
            {
                foreach (var endereco  in emails)
                {
                    if (EmailValido(endereco))
                    {
                        try
                        {
                            mailMessage.To.Add(new MailAddress(endereco));
                        }
                        catch (ArgumentNullException ex){}
                        catch (ArgumentException ex){}
                        catch (FormatException ex){}
    
                    }
                    else
                    {
                        RegistraErro(endereco);
                    }
                }
            }
    
            static bool EmailValido (string email)
            {
                return Regex.IsMatch(email,
                    @"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
                    @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$",
                    RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250));
            }
    
            void RegistraErro(string email)
            {
                throw new NotImplementedException();
            }


    ROBERTOSLJUNIOR


    • Editado robertosljunior terça-feira, 18 de agosto de 2015 17:32
    • Marcado como Resposta Marcos SJ terça-feira, 18 de agosto de 2015 19:01
    terça-feira, 18 de agosto de 2015 17:31
  • Boa Tarde Roberto

    Coloquei da forma que você postou e agora mudou o erro:

    Erro de Servidor no Aplicativo '/'.

    O método ou a operação não está implementada.

    Descrição: Ocorreu uma exceção sem tratamento durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código. 

    Detalhes da Exceção: System.NotImplementedException: O método ou a operação não está implementada.

    Erro de Origem: 
    Linha 612:        void RegistraErro(string email)
    Linha 613:        {
    Linha 614:            throw new NotImplementedException();
    Linha 615:        }
    Linha 616:

    Arquivo de Origem: c:\ARTSIM\SGSIM\ControledeUsuarios\Mailing.aspx.cs    Linha: 614 

    Rastreamento de Pilha: 
    [NotImplementedException: O método ou a operação não está implementada.]
       ControledeUsuarios.Mailing.RegistraErro(String email) in c:\ARTSIM\SGSIM\ControledeUsuarios\Mailing.aspx.cs:614
       ControledeUsuarios.Mailing.EnviarEmail(String assunto, String destinatario) in c:\ARTSIM\SGSIM\ControledeUsuarios\Mailing.aspx.cs:569
       ControledeUsuarios.Mailing.btnEnviarEmail_Click(Object sender, EventArgs e) in c:\ARTSIM\SGSIM\ControledeUsuarios\Mailing.aspx.cs:633
       System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9671538
       System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +108
       System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +12
       System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +15
       System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1639
    


    Informações sobre a Versão: Microsoft .NET Framework Versão:4.0.30319; Versão do ASP.NET:4.6.79.0

    terça-feira, 18 de agosto de 2015 20:09
  • Meu código:

    foreach(varendereco inemails)

    {

    if(EmailValido(endereco))

    {

    try

    {

    mailMessage.To.Add(newMailAddress(endereco));

    }

    catch(ArgumentNullExceptionex) { }

    catch(ArgumentExceptionex) { }

    catch(FormatExceptionex) { }

    }

    else

    {

    RegistraErro(endereco);

    }

    }

    /////////

    staticboolEmailValido(stringemail)

    {

    returnRegex.IsMatch(email,

    @"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))"+

    @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$",

    RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250));

    }

     

    voidRegistraErro(stringemail)

    {

    thrownewNotImplementedException();

    }

    terça-feira, 18 de agosto de 2015 20:10
  • O método RegistraErro era apenas um exemplo, e você deve implementar sua própria lógica.

    Remova o:

    throw new NotImplementedException();
    



    ROBERTOSLJUNIOR

    terça-feira, 18 de agosto de 2015 21:12
  • Boa Noite Roberto

    Eu tirei a linha de código e agora da outro erro.

    Pode me ajudar ?

    Erro de Servidor no Aplicativo '/'.

    É necessário especificar um destinatário.

    Descrição: Ocorreu uma exceção sem tratamento durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código. 

    Detalhes da Exceção: System.InvalidOperationException: É necessário especificar um destinatário.

    Erro de Origem: 
    Linha 595:                smtpClient.Port = 587;
    Linha 596:                
    Linha 597:                smtpClient.Send(mailMessage);
    Linha 598:                //return true;
    Linha 599:            //objStreamReader.Close();

    Arquivo de Origem: c:\ARTSIM\SGSIM\ControledeUsuarios\Mailing.aspx.cs    Linha: 597 

    Rastreamento de Pilha: 
    [InvalidOperationException: É necessário especificar um destinatário.]
       System.Net.Mail.SmtpClient.Send(MailMessage message) +2026
       ControledeUsuarios.Mailing.EnviarEmail(String assunto, String destinatario) in c:\ARTSIM\SGSIM\ControledeUsuarios\Mailing.aspx.cs:597
       ControledeUsuarios.Mailing.btnEnviarEmail_Click(Object sender, EventArgs e) in c:\ARTSIM\SGSIM\ControledeUsuarios\Mailing.aspx.cs:634
       System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9671538
       System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +108
       System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +12
       System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +15
       System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1639
    


    Informações sobre a Versão: Microsoft .NET Framework Versão:4.0.30319; Versão do ASP.NET:4.6.79.0

    quarta-feira, 19 de agosto de 2015 00:53
  • Meu código:

    foreach(varendereco inemails)

    {

    if(EmailValido(endereco))

    {

    try

    {

    mailMessage.To.Add(newMailAddress(endereco));

    }

    catch(ArgumentNullExceptionex) { }

    catch(ArgumentExceptionex) { }

    catch(FormatExceptionex) { }

    }

    else

    {

    RegistraErro(endereco);

    }

    }

    staticboolEmailValido(stringemail)

    {

    returnRegex.IsMatch(email,

    @"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))"+

    @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$",

    RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250));

    }

     

    voidRegistraErro(stringemail)

    {

    //throw new NotImplementedException();

    }

    quarta-feira, 19 de agosto de 2015 00:55
  • Bom dia pessoal

    Alguém pode me ajudar com meu post ?

    Ja tentei de tudo acima e ainda não consegui resolver meu problema.

    Se alguém puder me ajudar eu agradeço muito.

    Obrigado.

    quarta-feira, 19 de agosto de 2015 13:15
  • Qual sua dúvida? Pode postar seu código? Talvez possa ajudar.

    ROBERTOSLJUNIOR

    quinta-feira, 20 de agosto de 2015 03:22