Servicio de Validacion de Mail
February 23rd, 2009 por
algonzalez
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.
Publicado en C#, Net |
Sin Comentarios »

