Usuário com melhor resposta
Como verificar se um e-mail é valido antes de enviar ?

Pergunta
-
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
Todas as Respostas
-
-
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
-
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.
-
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 -
-
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.
-
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
-
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 -
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();
}
-
-
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 -
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();
}
-
-