jueves, 21 de enero de 2010

Validar que una direccion de Email tenga la estructura correcta

Bueno en un comentario que recivi, me sugirieron que publicara un codigo para validar un correo,  supongo que se refiere a una dirrecion de Email, asi que aqui les dejo la propuesta.

En este ejemplo solo haremos uso de un boton y un textbox.

Esta es una simple funcion que ejemplifica mediante la manipulacion de cadenas como validar una direccion de correo, en si esto seria la base para un analizador sintactico ( muy basica ), y consiste en analizar la estructura de una cadena para que se ajuste a ciertas reglas, esta sencilla funcion puede mejorarse asi que acepto sugerencias.


Private Function ValidaEMail(ByVal EMail As String) As Boolean

'Como primera regla un correo electronico debe contener la @
If Not EMail.Contains("@") Then
Return False
End If

'Dividimos la cadena en secciones, obviamente estas deben ser 2
'el usuario y el host, utilizamos como separador la @
Dim SeccionesEMail As String() = EMail.Split(CChar("@"))

'Ahora verificamos que evidentemente solo sean 2 secciones, ya que
'en caso contrario eso significa que hay mas de una @ y eso es incorrecto
If SeccionesEMail.Length <> 2 Then
Return False
End If

'Ahora verificamos que la segunda seccion de la cadena de correo contenga
'al menos un punto, ya que la seccion del dominio debe contener el punto
'Podemos establecer un tamaño minimo para el dominio en este caso le puse 3
If Not SeccionesEMail(1).Contains(".") Or Not SeccionesEMail(1).Length >= 3 Then
Return False
End If

Return True

End Function

En esta funcion aun necesitan corregirse detalles , ya que por ejemplo validaria la direccion "MyCorreo@...", la cual no es valida, pero pues eso ya es cuestion de continuar manipulando la cadena y estableciendo mas reglas.
Despues solo llamamos la funcion asi:


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

'Aqui hacemos la llamada a nuestra funcion
If ValidaEMail(TextBox1.Text) Then
MessageBox.Show("Correo valido")
Else
MessageBox.Show("Correo invalido")
End If

End Sub

Bueno esta seria la forma rudimentaria de hacerlo, pero a mi me gustan las cosas sencillas, y sabemos que el Framework nos provee de muchas herramientas para hacernos todo mas facil asi que, si lo queremos hacer todavia mas sencillo simplemente utilizamos la clase MailAddress, que esta en System.Net.Mail, creamos una instancia y esta nos evaluara de forma automatica si el formato es correcto.


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Try
'Creamos nuestro objeto, el constructor recive la cadena como parametro
Dim mail As New System.Net.Mail.MailAddress(TextBox1.Text)
'Al crear nuestro objeto evalua la cadena, y si es correcta no se produce
'ningun error
MessageBox.Show("Correo valido")
Catch ex As Exception
'En caso de que el formato de la cadena sea incorrecto nos produce una exepcion
'del tipo FormatException, ni necesidad tenemos que escribir el mensaje de error
'simplemente lo obtenemos de la exepcion
MessageBox.Show(ex.Message)
End Try

End Sub

Y asi podemos validar una direccion de correo, sencillo y eficiente ,  ¡suerte! , cualquier sugerencia o comentario son aceptados.


Probado en VS.net 2008



 

9 comentarios:

  1. HOLA AMIGO,,,,, QUIERO FELICITARTE POR ESTE EXCELENTE BLOG,,, ME HA SERVIDO DE MUCHOO....

    TAMBIEN QUERIA HACERTE UNA SOLICITUD....NECESITO CONSEGUIR EL LIBRO DE PROGRAMACION CON VISUAL BASIC 2008.... GRACIASSSSS Y ESPERO ME PUEDAS AYUDARR...
    espit20@hotmail.com

    ResponderEliminar
  2. Para las validaciones de email se usa expresiones regulares, eso te reduce mucho del codigo.

    ResponderEliminar
  3. gracias amigo me sirvio de mucho

    ResponderEliminar
  4. GRACIAS ESTA CHIDO ESTE CODIGO Y ME AYUDO UN CHORRO

    ResponderEliminar
  5. Realmentees un blog excelente

    ResponderEliminar
  6. me sirvio de mucho gracias. te complicas menos la vida con las herramientas que proporciona el framework

    ResponderEliminar
  7. Sin complicaciones solo correr el codigo y sin problemas

    ResponderEliminar
  8. gracias es simple y funcional lo mejor saludes

    ResponderEliminar
  9. Funciona mejor tu función, que la función de crear un email de System.WEB

    ResponderEliminar