Saltar al contenido

Código C# para validar la dirección de correo electrónico

Este artículo ha sido analizado por nuestros expertos para garantizar la veracidad de este artículo.

Solución:

¿Qué pasa con esto?

bool IsValidEmail(string email)

    try 
        var addr = new System.Net.Mail.MailAddress(email);
        return addr.Address == email;
    
    catch 
        return false;
    

Según el comentario de Stuart, esto compara la dirección final con la original. string en vez de volver siempre true. MailAddress intenta analizar un string con espacios en las partes “Nombre para mostrar” y “Dirección”, por lo que la versión original estaba regresando false positivos


Para aclarar, la pregunta es si un determinado string es una representación válida de una dirección de correo electrónico, no si una dirección de correo electrónico es un destino válido para enviar un mensaje. Para eso, la única forma real es enviar un mensaje para confirmar.

Tenga en cuenta que las direcciones de correo electrónico son más indulgentes de lo que podría suponer en un principio. Todas estas son formas perfectamente válidas:

  • [email protected]
  • “rueda dentada la naranja”@example.com
  • [email protected]$.xyz

Para la mayoría de los casos de uso, un false “inválido” es mucho peor para sus usuarios y para el futuro que un false “válido”. Aquí hay un artículo que solía ser la respuesta aceptada a esta pregunta (esa respuesta se eliminó desde entonces). Tiene muchos más detalles y algunas otras ideas de cómo resolver el problema.

Proporcionar controles de cordura sigue siendo una buena idea para la experiencia del usuario. Suponiendo que la dirección de correo electrónico sea válida, puede buscar dominios de nivel superior conocidos, verificar el dominio en busca de un registro MX, verificar errores ortográficos de nombres de dominio comunes (gmail.cmo), etc. Luego, presente una advertencia que le brinde al usuario la oportunidad de decir “sí, mi servidor de correo realmente lo permite como dirección de correo electrónico”.


En cuanto al uso del manejo de excepciones para la lógica empresarial, estoy de acuerdo en que es algo que debe evitarse. Pero este es uno de esos casos donde la conveniencia y la claridad pueden pesar más que el dogma.

Además, si hace algo más con la dirección de correo electrónico, probablemente implicará convertirla en una dirección de correo. Incluso si no usa esta función exacta, probablemente querrá usar el mismo patrón. También puede verificar tipos específicos de fallas detectando diferentes excepciones: nullvacío o formato no válido.


— Otras lecturas —

Documentación para System.Net.Mail.MailAddress

Explicación de lo que constituye una dirección de correo electrónico válida

Esta es una pregunta antigua, pero todas las respuestas que encontré en SO, incluidas las más recientes, se responden de manera similar a esta. Sin embargo, en .Net 4.5 / MVC 4 puede agregar la validación de la dirección de correo electrónico a un formulario agregando el [EmailAddress] anotación de System.ComponentModel.DataAnnotations, así que me preguntaba por qué no podía simplemente usar la funcionalidad integrada de .Net en general.

Esto parece funcionar, y me parece bastante elegante:

using System.ComponentModel.DataAnnotations;

class ValidateSomeEmails

    static void Main(string[] args)
    
        var foo = new EmailAddressAttribute();
        bool bar;
        bar = foo.IsValid("[email protected]");         //true
        bar = foo.IsValid("[email protected]");       //true
        bar = foo.IsValid("[email protected]");     //true
        bar = foo.IsValid("[email protected]");      //true

        bar = foo.IsValid("fdsa");                          //false
        bar = foo.IsValid("[email protected]");                         //false
        bar = foo.IsValid("[email protected]");                     //false
        bar = foo.IsValid("[email protected]");                    //false

        //one-liner
        if (new EmailAddressAttribute().IsValid("[email protected]"))
            bar = true;    
    

Utilizo este método de una sola línea que hace el trabajo por mí:

using System.ComponentModel.DataAnnotations;
public bool IsValidEmail(string source)

    return new EmailAddressAttribute().IsValid(source);

Según los comentarios, esto “fallará” si el source (la dirección de correo electrónico) es null.

public static bool IsValidEmailAddress(this string address) => address != null && new EmailAddressAttribute().IsValid(address);

Reseñas y puntuaciones del post

Si estás contento con lo expuesto, eres capaz de dejar una crónica acerca de qué te ha impresionado de este artículo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *