Recientemente, me he visto en la necesidad de validar una dirección de e-mail con autoit.
He buscado en el foro inglés pero no he encontrado nada...
Así, que pensando que sería algo más simple de lo que al parecer es, me puse a investigar en Google la forma de validar una dirección de e-mail, para plasmarlo luego en Autoit.
Sin mucho trabajo encontré esta página que me pareció el mejor ejemplo a seguir, puesto que habla de las reglas del RFC 2822 para las direcciones de correo electrónico:
http://www.linuxtotal.com.mx/index.php? ... _otros_002
La verdad, es que aunque según las explicaciones de esta página parece algo complejo, utilizando las expresiones regulares tal y como lo hacen en la página son 4 líneas. La cosa está en que yo nunca me entendí muy bien con las expresiones regulares en php (y menos en autoit), sinó que me limitaba a copiar y pegar en casos como este, cosa que no he podido hacer en este caso. Así pues, me he puesto manos a la obra y aunque con un código mucho más largo y seguramente más difícil de entender precisamente por lo largo que es, he conseguido (creo) el mismo resultado que la función que propone la página anterior.
En principio, la función que he escrito valida la dirección de e-mail que se le pasa tal y como indica que debe hacerse en la página que puse más arriba.
Yo he probado un poco su funcionamiento y parece ser correcto, pero quisiera que si alguien puede testearla un poco más a fondo y encuenra errores, se le ocurre como mejorar el código (lo suyo sería portar el de la función expuesta en la página anterior a autoit) etc, lo comentara, ya que me parece que esta función puede ser útil para muchas aplicaciones...
-Si la dirección de e-mail pasada a la función es válida esta devuelve 1, en caso contrario devuelve 0.
Ahí va el código:
Código: Seleccionar todo
Func MailValidation($XMail)
Local $Local_LegalCharacters="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!#$%&'*+-/=?^_`{|}~."
Local $Domain_LegalCharacters="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-"
Local $DomainType=0
$EmailCharacter=StringSplit($XMail, Chr(64))
If $EmailCharacter[0]<>2 Then
Return 0
EndIf
If (StringLen($EmailCharacter[1])<1 Or StringLen($EmailCharacter[1])>64) Then
Return 0
EndIf
$_EmailCharacter=StringSplit($EmailCharacter[1], "")
If $_EmailCharacter[1]==Chr(46) Then
Return 0
EndIf
If StringInStr($EmailCharacter[1], Chr(92))<>0 Then
Return 0
EndIf
For $I=1 To $_EmailCharacter[0] Step +1
If ($_EmailCharacter[$I]<>"""" And StringInStr($Local_LegalCharacters, $_EmailCharacter[$I])==0) Then
If (StringInStr($EmailCharacter[1], """")==0 Or StringInStr($EmailCharacter[1],"""", 0, -1)==0 Then
Return 0
ExitLoop
EndIf
EndIf
Next
$CheckExtremesSymbolsDomainBloq=StringSplit($EmailCharacter[2], "")
If (($CheckExtremesSymbolsDomainBloq[1]=="[" Or $CheckExtremesSymbolsDomainBloq[1]=="(") And ($CheckExtremesSymbolsDomainBloq[$CheckExtremesSymbolsDomainBloq[0]]=="]" Or $CheckExtremesSymbolsDomainBloq[$CheckExtremesSymbolsDomainBloq[0]]==")")) Then
$EmailCharacter[2]=StringTrimLeft($EmailCharacter[2], 1)
$EmailCharacter[2]=StringTrimRight($EmailCharacter[2], 1)
EndIf
$IpSplit=StringSplit($EmailCharacter[2], ".")
If $IpSplit[0]<>4 Then
$DomainType=1
Else
For $n=1 To 4
If IsNumber($IpSplit[$n]) Then
$DomainType=1
EndIf
If (Number($IpSplit[$n])<0 Or Number($IpSplit[$n])>255) Then
$DomainType=1
EndIf
Next
EndIf
If $DomainType==1 Then
If $EmailCharacter[2]>255 Then Return 0
$BloqDomainDiv=stringSplit($EmailCharacter[2], Chr(46))
If $BloqDomainDiv[0]<2 Then
Return 0
EndIf
For $I=1 To $BloqDomainDiv[0] Step +1
If (StringLen($BloqDomainDiv[$I])<1 Or StringLen($BloqDomainDiv[$I])>63) Then
Return 0
ExitLoop
EndIf
$_BloqDomainDiv=StringSplit($BloqDomainDiv[$I], "")
If ($_BloqDomainDiv[1]==Chr(45) Or $_BloqDomainDiv[$_BloqDomainDiv[0]]==Chr(45)) Then
Return 0
ExitLoop
EndIf
For $X=1 To $_BloqDomainDiv[0] Step +1
If StringInStr($Domain_LegalCharacters, $_BloqDomainDiv[$X])==0 Then
Return 0
ExitLoop
EndIf
Next
Next
Return 1
Else
Return 1
EndIf
EndFunc
Salu2!