Foros del Web » Programando para Internet » PHP »

Mail y emails incorrectos

Estas en el tema de Mail y emails incorrectos en el foro de PHP en Foros del Web. Hola, espero me podaís echar una mano, mi duda es la siguiente. Tengo una lista de emails a los que enviar un boletín y tengo ...
  #1 (permalink)  
Antiguo 09/06/2004, 05:17
 
Fecha de Ingreso: febrero-2003
Mensajes: 47
Antigüedad: 21 años, 2 meses
Puntos: 0
Mail y emails incorrectos

Hola, espero me podaís echar una mano, mi duda es la siguiente.

Tengo una lista de emails a los que enviar un boletín y tengo la función para enviar emails.

Entonces con un bucle voy enviando uno a uno todos los emails. Cuando el bucle concluye (ya no hay más emails que enviar), redirecciono automaticamente a otra página (con header("Location:) con lo que no puede imprimirse nada en esta página de otra forma sale el error, headers already sent by. Una vez se redirecciona a la otra página muestro un mensaje de "Operación realizada con exito".


El problema es, que cuando un email de la lista es incorrecto, me devuelve por pantalla el siguiente mensaje:

Warning: mail(): SMTP server response: 550 <[email protected]>: User unknown in virtual alias table in c:\...\libreria.inc on line 371

Y claro no me hace la redirección. Mi idea es almacenar los mensajes de error en una variable y al final en la nueva pantalla poner "operación realizada con estos errores:".

Espero haberme explicado, por cierto quería lanzar un popup con un gif animado que ponga operación en curso ... (ya que la lista de emails es bastante amplia y tarda un rato) y que cuando se redireccione a la página donde pongo el mensaje de "operación realizada" se cierre automaticamente, como lo hago? Sobre todo el tema de cerrar una ventana creada con javascript.

Mil Gracias.
  #2 (permalink)  
Antiguo 09/06/2004, 06:28
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 19 años, 10 meses
Puntos: 2
pon una @ delante de mail, así no te mostrará el error:

@mail(.........,....,......);
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #3 (permalink)  
Antiguo 09/06/2004, 10:54
Avatar de xcorpion  
Fecha de Ingreso: octubre-2003
Ubicación: m é x i c o
Mensajes: 676
Antigüedad: 20 años, 6 meses
Puntos: 4
o puedes deshabilitar los warnings desde el erchivo php.ini
  #4 (permalink)  
Antiguo 10/06/2004, 01:56
 
Fecha de Ingreso: febrero-2003
Mensajes: 47
Antigüedad: 21 años, 2 meses
Puntos: 0
Gracias por la ayuda, he probado y poniendo la @ delante, efectivamente no recibo el Warning, pero claro no hay forma de almacenar estos warning, es que me interesa saber Qué emails han fallado.
  #5 (permalink)  
Antiguo 10/06/2004, 14:45
Avatar de xcorpion  
Fecha de Ingreso: octubre-2003
Ubicación: m é x i c o
Mensajes: 676
Antigüedad: 20 años, 6 meses
Puntos: 4
claro, tu servidor deve tener un error_log, este guardara todos los errores que suscedan.
  #6 (permalink)  
Antiguo 15/06/2004, 06:59
 
Fecha de Ingreso: febrero-2003
Mensajes: 47
Antigüedad: 21 años, 2 meses
Puntos: 0
Pense haber encontrado la solución...

Yo lo que quiero es que si el email no se puede enviar porque la dirección es incorrecta o no existe al enviar el mail me avise.

Pense que lo había resuelto pero ahora que lo he subido a Internet veo que no.

Como os dije en local coloqué la "@" con lo que evito que me salte el warning, entonces me fijé que cuando daba el warning el resultado de ejecutar la función @mail() era nada, vacio, mientras que cuando @mail() enviaba correctamente el mensaje devuelve un 1. Entonces fui almacenando las salidas (lo que me devolvía) y tenía resuelto el problema.

Pero ahora lo he subido a internet y me he dado cuenta que @mail() siempre devuelve 1 aunque la dirección sea [email protected]

Claro y para mi es muy importante saber de la lista que emails no se han podido enviar como pasaba cuando lo he probado en local.

Me podeís echar una mano, amigos.
  #7 (permalink)  
Antiguo 15/06/2004, 08:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
La función mail devuelve un "true" o "false" según pueda o no ejecutarse (conectar con el MTA para entregar el e-mail .. eso no significa que lleguen a sus destinatario por médio de ese MTA (servidor SMTP, sendmail o similares que lo envie).

así que podrías usarlo tipo:

Código PHP:
if (@!mail(.....)){
// aquí registras tus errores.

se usa @ para "silenciar" los mensajes de error de esa única función .. y aprovechando que es un "booleano" lo que devuelve .. pues lo uso en un condicional (y lo niego ! para no hacer el else ...) .. SI hay error .. registro el error en mi BD o lo muestro o como corresponda ...

En la práctica .. la mayoría de veces PHP consigue conectar con el MTA del servidor para "entregarle" el e-mail .. PHP llegado este punto de "entrega" .. desconecta y si hay errores en la entrega final al destinatario es ese servidor de correo el que hará los re-intentos ("relay") para enviar el e-mail .. según esté configurado al N intento devolverá un e-mail al remitente diciendo el problema (a la cuenta que se especifique o al mismo remitente). Otros servidores de correo no emiten esas respuestas ...

La única solución para ver si realmente existe una cuenta de correo X o de los problemas que pueda tener .. es conectar vía socktes directo a ese servidor SMTP (si es que lo permite) e intentar mandar el e-mail .. ahí será cuando dé algún mensaje de error.

Lo más básico es comprobar vía régistros MX de la IP del host (nombre@bhost.tal) si la cuenta existe como "servidor de e-mail" .. ahora .. que el usuario a su vez exista depende de ese servidor SMTP si deja conectarse a el para verlo ..

Para rematar todo esto .. el proceso es "leennnto" para hacer ese chequeo pues .. se conecta a X servidor (por sockets) y se empieza a "negociar" con parte del protocolo SMTP intentando el envio y leyendo las respuestas que se dan.

Un saludo,

Última edición por Cluster; 15/06/2004 a las 08:12
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:56.