Servicio de Validacion de Mail

En base a un trabajo que se presento en mi oficina, me pidieron realizar un servicio web que cumpla la funcion de una realizar la comparacion general para un mail valido.

Se me ocurrio que podria usar una “Expresion Regular”  y como muy vago de mi parte, no me puse a realizarla, si no que busque algunas existentes y analice probe y finalmente me quede con la siguiente

^(([\w-]+\.)+[\w-]+|([a-zA-Z]{1}|[\w-]{2,}))@((([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])){1}|([a-zA-Z]+[\w-]+\.)+[a-zA-Z]{2,4})$.

Pero despues de hacer el testeo general y completo de esta expresion regular pasón que no me valida direcciones que despues del arroba tenga un numero, lo cual me dejaba fuera direcciones con por ejemplo nombre@2media.com y para no romper la expresion y para que todo salga rapido se lo deje a resolucion a nuestro amigo C#.

Bueno llego la hora de plasmarla en el servicio lo cual me quedo algo asi.


using System;
using System.Data;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.ComponentModel;
using System.Text.RegularExpressions;
using System.Configuration;

namespace TestEmail
{
///
/// Summary description for EmailTest
///
[WebService(Namespace = “http://anses.gov.ar/arquitectura/”)]
[WebServiceBinding(ConformsTo = WsiProfiles.None)]
[ToolboxItem(false)]
public class EmailTest : System.Web.Services.WebService
{
[WebMethod]
public bool ValidaEmail(string sMail)
{
return IsEmail(sMail);
}
[WebMethod]
private bool IsEmail(string email)
{
const string PatronEmail =
@”^(([\w-]+\.)+[\w-]+|([a-zA-Z]{1}|[\w-]{2,}))@”
+ @”((([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.”
+ @”([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])){1}|”
+ @”([a-zA-Z]+[\w-]+\.)+[a-zA-Z]{2,4})$”;
bool bRes = Regex.IsMatch(email, PatronEmail);
if (bRes)
{
return FiltroPalabras(email);
}
return bRes;
}
private String[] Filtro;
public bool FiltroPalabras(string email)
{
String sPalabras = ConfigurationManager.AppSettings[“ADRIANFiltro”];
this.Filtro = sPalabras.Split(new Char[] { ‘|’ });
foreach (string sPalabra in this.Filtro)
{
if (email.Contains(sPalabra)) return false;
}
return true;
}

Bueno hasta aca todo muy lindo pero, una de las pautas que tenia era que este filtro no tendria que dejar pasar las direcciones provenientes de nuestra misma empresa (Requisito particular), es por esto que tuve que agregar un filtro en el archivo Web.config, para cumplir con esta restricción.

 < appSettings>
       <add key=ADRIANiltro value=“algonzalez.com.ar|adrgon.com.ar/>
</appSettings>

Esto me sirvio para salir del paso, como esas soluciones provisorias para siempre, lo bueno es que esta funcionando y hasta el momento no me genero reclamos.

Anuncios

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: