Servicio de Validacion de Mail

febrero 23, 2009

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.


Clase separador de letras y Numeros

noviembre 5, 2008

Después de un largo periodo de sin actividad, es mi deseo de retomar, con algunas notas, ejemplos y artículos.
Para que esta entrada no quede pobre les voy a dejar una pequeña clase en C# que he preparado hoy para una aplicacion,
La función es de este es dividir una cadena en letras y numero, yo la utilizo para dividir el documento y el tipo, Por ejemplo DU22330011

class Complemento
{
public static string retornaTipo(string sCadena)
{
string sLetras = string.Empty;

foreach (char s in sCadena)
{
if (Char.IsLetter(s))
{
sLetras += s;
}
}
return sLetras;
}

public static string retornaDocumento(string sCadena)
{
string sNumeros = string.Empty;

 

foreach (char s in sCadena)
{
if (Char.IsDigit(s))
{
sNumeros += s;
}
}
return sNumeros;
}
}

Puede que no sea lo que esperaban y sea poco pero espero que a alguien le sea de utilidad, si no quedara para la posteridad