Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-05-2005
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
Como Saber si una Dirección de Correo es Válida????

Uso D6

Estoy usando un demo de los indy's MailClient que sirve para enviar EMAIL's, pero no he podido encontrar como saber si la Dirección de Correo del Destinatario es VALIDA para serciorarme que le llegará el correo, de lo contrario si es inválido avisarle al usuario que Corrija dicha dirección de correo.

Agradezco cualquier sugerencia.
Responder Con Cita
  #2  
Antiguo 26-05-2005
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 21
JXJ Va por buen camino
¿¿de que este bien escrita. por ejemplo Cuenta@hotmail.com y no
Cuienta@hotmail,com??

¿o de que esa cuenta de correo este activa en el servidor. del correo de
destinatario?
Responder Con Cita
  #3  
Antiguo 26-05-2005
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 21
JXJ Va por buen camino
Smile

Esto es para aeguranos que la sintaxis de la cuenta de correo este
bien escrita. como el primer ejemplo que de di.

Código Delphi [-]
 
function IsValidEmail(const Value: string): Boolean;
 
function CheckAllowed(const s: string): Boolean;
var i: Integer;
begin
Result:= false;
for i:= 1 to Length(s) do
if not (s[i] in ['a'..'z', 
'A'..'Z', 
'0'..'9', 
'_', 
'-', 
'.']) then Exit;
Result:= true;
end;
 
var
i: Integer;
NamePart, ServerPart: string;
begin
Result:= False;
i:=Pos('@', Value);
if i=0 then Exit;
NamePart:=Copy(Value, 1, i-1);
ServerPart:=Copy(Value, i+1, Length(Value));
if (Length(NamePart)=0) or ((Length(ServerPart)<5)) then Exit;
i:=Pos('.', ServerPart);
if (i=0) or (i>(Length(serverPart)-2)) then Exit;
Result:= CheckAllowed(NamePart) and CheckAllowed(ServerPart);
end;

el codigo fuente de un pryecto de muestra. por si no fui claro.
http://greatis.com/delphicb/tips/lib...checkemail.zip
Responder Con Cita
  #4  
Antiguo 26-05-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
No he probado "en vivo" pero me parece que el algoritmo fallaría con algo como:

juanperez@servidor.com.

Donde evidentemente el último punto está de mas.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #5  
Antiguo 26-05-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Pues yo lo acabo de probar y falla, pues me da valida una dirección de correo terminada en .

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #6  
Antiguo 26-05-2005
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 21
JXJ Va por buen camino
Claro que falla. lo que revisa es si la dirección esta bien escrita.
en las primeras partes antes y despues de la @
juanperez@servidor.com. y eso por que hay ciertas formas de enviar el correo
por ejemplo, algunos componente o dll, para enviar correo
solo admiten o ( , ) o ( ; ) o ambas, indy creo que permite usar dos formas
de separar los destinatarios por ( , ) o ( ; ), no faltara quien crea mejor usar un ( . )
--}
si saben como solucionar ese defecto. decirlo. o los otros posibles que al separar
los destinatarios se vaya un dedo de may se agregen ( ,,) o ( ;; ) o semejantes.

aparte, AgAg4 no dice si es solo verificar, la sintaxis o se refiere a revisar si
la cuenta de correo esta activa.
Responder Con Cita
  #7  
Antiguo 26-05-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Y qué tal si escribo una dirección como ésta?

"Informático Román %&$" <roman@gmail.com>

// Saludos
Responder Con Cita
  #8  
Antiguo 26-05-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Personalmente y con todo el afán del mundo para convertir este hilo en un debate.... creo que todo lo expuesto aqui es excesivo.

"Por favor, introduzca un e-mail válido!!!" y listo...... sin problemas, si la persona quiere enviar/recibir "lo que sea" se esforzará en escribir el correo bien.

Es bueno realizar algunas comprobaciones, que haya un nombre, la @ y despues algo más. Pero ya está. No nos compliquemos la vida.

Se envia el correo, y si se produce un fallo, (porque el correo no existe) pues se informa a posteriori.

Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #9  
Antiguo 26-05-2005
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
ok

Pues lo que quiero es que sea Valida, es decir, que la Cuenta de Correo este activa en el servidor del correo del destinatario....

Ya ven que cuando envian un EMAIL con un correo Incorrecto del Destinatario, al mandarlo te dice el Servidor de Correo, Cuenta de Correo No Existe....

Gracias por sus respuestas....
Responder Con Cita
  #10  
Antiguo 26-05-2005
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 21
JXJ Va por buen camino
Smile

Pues retomando lo que dice. Lepe.

Se envia el correo, y si se produce un fallo, (porque el correo no existe) pues se informa a posteriori.

He tenido la curiosidad de hacer lo que dices AgAg4, pero hay algunos
problemas que he tenido para dejarlo en paz.
se puede hacer lo que pides.
he aqui algunos de los problemas.


Algunos servidores. de cuando en cuando, el correo que envias tarda en llegar
al servidor. de segundos a minutos.

hay servidores que aunque la cuenta de correo, no exista. reciben el correo
y no dan respuesta de que esa cuenta de correo, no existe. no te mandan
un dalivery notification faillure o similar.


y el codigo puesto solo es una pequeña ayuda,.
al estilo de las ayudas que se dan en el foro, no se tiene el tiempo suficiente para
andar codificando para otro. o unos no quieren compartir, todo el codigo.
si no que prefieren que aprendamos. desde cosas sencillas, pero funcionales.
o como yo que mi nivel es de menos termino medio - hacia abajo.
no podemos poner codigo en poco tiempo, que maneje todas las posibles excepciones.
a un correo bien escrito
Personalmente me tardo.


¿si crees que esos casos, van a pasar donde hay caracteres especiales,?
pues solo codificas.
Responder Con Cita
  #11  
Antiguo 27-05-2005
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
ok

Gracias JXJ por su respuesta, tiene muchísima razón con respecto a sus comentarios sobre el regreso de respuesta por parte del servidor de correo, he investigado un poco y me he percatado que no va hacer muy exacto el monitoreo de envios de EMAILS a Direcciones Incorrectas, pero en fin algo saldrá más preciso.... de ante mano gracias ...

Que tengan buen día.
Responder Con Cita
  #12  
Antiguo 27-05-2005
S.M.S. S.M.S. is offline
Miembro
 
Registrado: jun 2003
Ubicación: España
Posts: 56
Poder: 21
S.M.S. Va por buen camino
Yo utilizo la siguiente función que no recuerdo de donde la saqué, pero que funciona perfectamente con los ejemplos de jachguate y de roman

Código Delphi [-]
function ValidEmail(email: string): boolean;
   // Devuelve True si la dirección de email es válida
   const
     // Caracteres válidos en un "átomo"
     atom_chars = [#33..#255] - ['(', ')', '<', '>', '@', ',', ';', 
     ':', '\', '/', '"', '.', '[', ']', #127];
     // Caracteres válidos en una "cadena-entrecomillada"
     quoted_string_chars = [#0..#255] - ['"', #13, '\'];
     // Caracteres válidos en un subdominio
     letters = ['A'..'Z', 'a'..'z'];
     letters_digits = ['0'..'9', 'A'..'Z', 'a'..'z'];
     subdomain_chars = ['-', '0'..'9', 'A'..'Z', 'a'..'z'];
   type
     States = (STATE_BEGIN, STATE_ATOM, STATE_QTEXT,
     STATE_QCHAR, STATE_QUOTE, STATE_LOCAL_PERIOD,
     STATE_EXPECTING_SUBDOMAIN, STATE_SUBDOMAIN, STATE_HYPHEN);
   var
     State: States;
     i, n, subdomains: integer;
     c: char;
begin 
  State := STATE_BEGIN;
  n := Length(email); 
  i := 1;
  subdomains := 1; 
  while (i <= n) do 
    begin
      c := email[i];
      case State of 
         STATE_BEGIN: 
                  if c in atom_chars then
                  State := STATE_ATOM 
                  else if c = '"' then 
                  State := STATE_QTEXT
                  else break;
         STATE_ATOM:
                  if c = '@' then
                  State := STATE_EXPECTING_SUBDOMAIN
                  else if c = '.' then 
                  State := STATE_LOCAL_PERIOD
                  else if not (c in atom_chars) then 
                  break; 
         STATE_QTEXT:
                  if c = '\' then
                  State := STATE_QCHAR 
                  else if c = '"' then
                  State := STATE_QUOTE 
                  else if not (c in quoted_string_chars) then 
                  break; 
         STATE_QCHAR:   
                  State := STATE_QTEXT; 
         STATE_QUOTE:
                  if c = '@' then 
                  State := STATE_EXPECTING_SUBDOMAIN
                  else if c = '.' then
                  State := STATE_LOCAL_PERIOD 
                  else break; 
         STATE_LOCAL_PERIOD:
                  if c in atom_chars then
                  State := STATE_ATOM 
                  else if c = '"' then 
                  State := STATE_QTEXT
                              else break; 
         STATE_EXPECTING_SUBDOMAIN: 
                  if c in letters then
                  State := STATE_SUBDOMAIN 
                  else break;
         STATE_SUBDOMAIN:
                  if c = '.' then
                  begin 
                      inc(subdomains);
                      State := STATE_EXPECTING_SUBDOMAIN
                  end
                  else if c = '-' then 
                  State := STATE_HYPHEN
                  else if not (c in letters_digits) then 
                  break;
         STATE_HYPHEN:
                  if c in letters_digits then
                  State := STATE_SUBDOMAIN
                  else if c <> '-' then break;
      end;
      inc(i);
    end;
  if i <= n then
  Result := False
  else
  Result := (State = STATE_SUBDOMAIN) and (subdomains >= 2);
end;
Saludos.
Responder Con Cita
  #13  
Antiguo 27-05-2005
johncook johncook is offline
Miembro
 
Registrado: oct 2004
Posts: 65
Poder: 20
johncook Va por buen camino
Muchachos, muchachos... Tanto lío para validar un mail...
Porque mejor no valernos de expresiones regulares, no? En C# no hay q instalar ninguna libreria de terceros para el uso de éstas expresiones... En delphi yo utilizo RegExpr, porque desconozco si existe alguna función nativa del lenguaje...
Código Delphi [-]
 uses RegExpr;
 
procedure TForm1.Button1Click(Sender: TObject);
// Valida la dirección de email en Edit1
begin
  if not ExecRegExpr('[\w\d\-\.]+@[\w\d\-]+(\.[\w\d\-]+)+',
      Edit1.Text) then begin
    ShowMessage('La dirección de email no es válida');
    Edit1.SetFocus;
  end else
    ShowMessage('La dirección de email es válida');
end;
Les dejo el enlace

Última edición por vtdeleon fecha: 03-10-2006 a las 20:45:04.
Responder Con Cita
  #14  
Antiguo 27-05-2005
Avatar de __hector
[__hector] __hector is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 1.075
Poder: 22
__hector Va por buen camino
Puedes conectarte al servidor smtp del dominio al que quieres mandar el mail, y con un par de comandos, puedes saber si esa cuenta existe en dicho servidor. Digo, si te refieres a validar que existe, y no exactamente a validar la sintaxis de la direccion.
__________________
Héctor Geraldino
Software Engineer
Responder Con Cita
  #15  
Antiguo 27-05-2005
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
oki

Muchas Gracias por sus respuestas, estoy tomando en cuenta todas sus opiniones, Que Tengan Buen Día....!!!!
Responder Con Cita
  #16  
Antiguo 28-05-2005
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 21
JXJ Va por buen camino
johncook

Una busqueda rapida, me llevo a sitios
Pero ya estan muertos.

¿¿Cual es el enlace. ??

gracias.
Responder Con Cita
  #17  
Antiguo 28-05-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Con la ayuda de algunos trucos, he llegado al nuevo sitio oficial de TRegExpr para delphi

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #18  
Antiguo 28-05-2005
johncook johncook is offline
Miembro
 
Registrado: oct 2004
Posts: 65
Poder: 20
johncook Va por buen camino
Sorry, se me olvidó el enlace.... Pero es el que puso el amigo jachguate.. Gracias. Saludos.
Responder Con Cita
  #19  
Antiguo 28-05-2005
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
oki

Gracias por sus respuestas....

Que Tengan Buen Día....
Responder Con Cita
  #20  
Antiguo 26-07-2005
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
Pues por más que le busque no pude utilizar el componete TRegExpr..
En las notas de instalación menciona que hay que agregar el .pas al proyecto y y agregar el Unit RegExpr, pero cuando hice eso, me marco que el archivo RegExp.dcu no existe, y en efecto, no existía, hasta que lo compile y por fin aparecio el archivo .dcu el problema luego fue que no lo encontraba, así que agregue el directorio en Enviroment Options - Lybrary pero entonces al tratar de correr uno de los demos me marca la excepcion EIOInputError....
en fin, el punto es que no pude hacer que funcionara, supongo que la forma de instalarlo es lo que me esta fallando. Si alguien tiene alguna pista o una idea para poder instalar el RegExpr se los agradecíra mucho.

Trabajo con D5 con UpdatePack 1 (6.18)
__________________


Última edición por ContraVeneno fecha: 26-07-2005 a las 22:13:49.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 16:34:01.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi