Foros del Web » Programando para Internet » PHP »

Duda sobre phpMailer

Estas en el tema de Duda sobre phpMailer en el foro de PHP en Foros del Web. Hola a todos, Estoy utilizando la libreria phpMailer para php5 y tengo que enviar un mismo correo a diferentes destinatarios, el envío lo hago por ...
  #1 (permalink)  
Antiguo 31/10/2008, 06:32
Avatar de SUSMO  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 188
Antigüedad: 16 años
Puntos: 0
Duda sobre phpMailer

Hola a todos,

Estoy utilizando la libreria phpMailer para php5 y tengo que enviar un mismo correo a diferentes destinatarios, el envío lo hago por smtp y me lo hace sin ningún tipo de problema. Con un for hago tantos AddAddress() como a personas que quiero enviar el mail y después del for hago el Send().

La questión es que me interesa que los destinatarios no puedan saber a quién más se le envía el mismo correo y no se como hacerlo, ni siquiera se si es posible.
La opción de enviar el correo por cada usuario ya la he barjado pero me da miedo que si la lista de usuarios es muy grande tarde demasiado.

He provado en lugar de AddAddress la función AddBCC, pero entonces en el gestor de correo en lugar de mostrarme el nombre del destinatario me pone "undisclosed-recipients:" ,es decir, en lugar de: "Para: nombre de usuario" me pone "Para: undisclosed-recipients:" y esto queda realmente feo.

Alguien tiene alguna idea de como solucionarlo?

Gracias de antemano
__________________
Perdida en el mundo del conocimiento
  #2 (permalink)  
Antiguo 31/10/2008, 08:22
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años
Puntos: 16
Respuesta: Duda sobre phpMailer

a mi me paso lo mismo busque por todos lados hasta que me puse a mirar la clase encontre una funcion que no estaba en el manual oficial de la pagina, que es ClearAddresses();

Código PHP:
if(!$mail->Send()){
                        
$dataSend['status']=$mail->ErrorInfo;
                        
$mail->insertSendData($data);
                        echo 
'error en este envio: '.$emails[$i][0];
                        
$mail->ClearAddresses();
                    }else{
                        
                        
$dataSend['status'] = 'ok';
                                                            
                        
$mail->insertSendData($dataSend);
                        
$mail->ClearAddresses();
                           echo 
'enviado a: '.$emails[$i][0];
                    }

//insertSendData es una funcion que le agregue yo, para que me envie un alerta 
  #3 (permalink)  
Antiguo 31/10/2008, 11:36
Avatar de SUSMO  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 188
Antigüedad: 16 años
Puntos: 0
Respuesta: Duda sobre phpMailer

Hola samu22,

El ClearAddresses no borra todas las direcciones de destinatario que se han puesto? No entiendo la utilidad de borrar las direcciones una vez enviado el correo ya que, en mi caso, una vez enviado el correo acaba el script.
Lo que a mí me interesa es poder enviar de una sola tirada el mismo correo a todos los usuarios pero sin que entre ellos sepan a quienes más va dirigido el mail, es decir, que cuando el usuario lea el correo donde pone Para: nombre de usuario sólo ponga el suyo y no el nombre de todos los usuarios que han recibido el mail.

Saludos
__________________
Perdida en el mundo del conocimiento
  #4 (permalink)  
Antiguo 31/10/2008, 11:46
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años
Puntos: 16
Respuesta: Duda sobre phpMailer

a mi me sirvio porque te comento lo que hice, tenia varias listas de mail para enviar, cuando se selecciona una carga la lista completa, por ejemplo 20 mails, entonces hacia un bucle para que me lo enviara de a uno, pero no se porque el primer mail llegaba sin las otras direcciones, pero el segundo acumulaba la anterior entonces en el mail 19 tenia 18 mails dirijido por lo que al 1 se le enviaban 20 veces, siendo que el mail era especificamente el numero 19 y no el 1 2 3 4 ... etc
se ve que la misma clase los va acumulando, entonces despues de enviar el mail borro la lista y envio el segundo mail, por eso lo hice asi y me funciono perfecto
  #5 (permalink)  
Antiguo 31/10/2008, 12:06
Avatar de SUSMO  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 188
Antigüedad: 16 años
Puntos: 0
Respuesta: Duda sobre phpMailer

Aha, entiendo. Tu solución va muy bien si envías un mail por persona pero yo quiero enviar el mail de una sola tirada a todos los usuarios ya que si hago un envío por cada persona temo que sea muy lento y el administrador que envía los correos debe esperarse a enviar cada uno de los correos antes de recibir confirmación de si se ha enviado bien o no.
__________________
Perdida en el mundo del conocimiento
  #6 (permalink)  
Antiguo 31/10/2008, 12:16
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años
Puntos: 16
Respuesta: Duda sobre phpMailer

lo que podrias hacer es agregarte a vos en el $AddAdress() y todos los otros como copia oculta, porque sino es imposible ocultar las direcciones que se estan enviando en ese momento, si le estas enviando a 20 mails a la vez la unica forma de que no aparezca es mandando como copia oculta, y pone una direccion para que no te quede ese mensaje undisclosed-recipients
  #7 (permalink)  
Antiguo 31/10/2008, 21:13
Avatar de Gerifaltus  
Fecha de Ingreso: junio-2005
Ubicación: Tabasco, México
Mensajes: 180
Antigüedad: 18 años, 9 meses
Puntos: 4
Respuesta: Duda sobre phpMailer

Hola que tal, para lo que pides puedes hacer lo siguiente:


Código:
$mail->AddBCC('$mail','$nombre_usuario');
Inténtalo así y nos comentas como si te funcionó.


Saludos.
__________________
:::.. Todo tiene un ¿Por qué? y un ¿Para qué? ..:::
:::.. Todo se reduce a un SI y a un No ..:::
  #8 (permalink)  
Antiguo 03/11/2008, 07:51
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años
Puntos: 16
Respuesta: Duda sobre phpMailer

Código PHP:
$mail->AddBCC('$mail','$nombre_usuario'); 
es que el problema con esto es no aparece un destinatario principal, entonces muestra esta frase: undisclosed-recipients

se envia a todos, pero con eso, fijate en el primer post que SUSMO dice que utilizo eso
  #9 (permalink)  
Antiguo 03/11/2008, 10:43
Avatar de SUSMO  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 188
Antigüedad: 16 años
Puntos: 0
Respuesta: Duda sobre phpMailer

Hola,

Al final he resuelto el tema poniendo como AddAdress() mi dirección de correo para que no salga undisclosed-recipients y como AddBCC() el resto de direciones.

Aquí dejo el código:

Código PHP:
//$info_client es un array con la información del remitente del correo
$mail->AddAddress($info_client["email"],$info_client["name"]);

foreach (
$_POST["users"] as $userId)
{
    
$info $news->getInfoUser($userId); //Función que me devuelve la información del destinatario
    
$mail->AddBCC($info["email"],$info["name"]);
}
        
$ok $mail->Send();
$repeat=1
while ((!
$ok) && ($repeat 3)) {
    
sleep(5);
        
$ok $mail->Send();
    
$repeat++;    
}

if (!
$ok)
{
    echo 
"Error al enviar el correo.";
}else{
        echo 
"Correo enviado correctamente.";

Dicho esto, tengo una duda existencial, este código se ejecuta en un pop up que recoge la información del formulario de envío. Cuando acaba de enviar el correo me sale el mensaje de confirmación de envío pero mientras lo está enviando el pop up está en blanco, lógico pq se ejecuta en servidor, ya lo se, pero quisiera saber si hay alguna manera de mostrar un mensaje del estilo: "Sus correos se estan enviando..." o algo así antes de ejectuar el código php.

Gracias por vuestra ayuda!!
__________________
Perdida en el mundo del conocimiento
  #10 (permalink)  
Antiguo 03/11/2008, 10:46
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: Duda sobre phpMailer

En ese mismo PHP antes de empezar con los bucles y mandar los mails... puedes mostrar lo que quieras por pantalla. Prueba a poner un echo con un texto al principio...
  #11 (permalink)  
Antiguo 03/11/2008, 10:53
Avatar de SUSMO  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 188
Antigüedad: 16 años
Puntos: 0
Respuesta: Duda sobre phpMailer

Hola Keysher,

Ya lo he probado, justo antes de ejecutar el script hacer un echo pero no me lo muestra hasta que se ejecuta todo el código.
__________________
Perdida en el mundo del conocimiento
  #12 (permalink)  
Antiguo 03/11/2008, 10:55
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: Duda sobre phpMailer

Umm, prueba a pone run flush(); después del echo.
  #13 (permalink)  
Antiguo 03/11/2008, 10:59
Avatar de SUSMO  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 188
Antigüedad: 16 años
Puntos: 0
Respuesta: Duda sobre phpMailer

Me sigue haciendo lo mismo :(
__________________
Perdida en el mundo del conocimiento
  #14 (permalink)  
Antiguo 03/11/2008, 11:02
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: Duda sobre phpMailer

A ver... ese script se eejcuta cuando se carga la página en el pop-up? en teoria si en ese mismo script, lo primero que escribes es un echo y luego el flush(), debería mandar los datos al navegador y seguir ejecutando el script (en éste caso mandar los mails)
  #15 (permalink)  
Antiguo 03/11/2008, 11:07
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años
Puntos: 16
Respuesta: Duda sobre phpMailer

yo opino que $mail->Send() tendria que estar en un if,
Código PHP:
$repeat=1
if(
$mail->Send()){
   echo 
'enviando <img src="puntitos.gif"/>';
}else{

while (
$repeat 3) {
 echo 
'reenviando <img src="puntitos.gif"/>';
    
sleep(5);
        
$ok $mail->Send();
    
$repeat++;    

el tema es que si no se envia se va a frenar para volver a enviar, podrias seperar los mails fallidos y despues volverlos a enviar si el usuario lo desea, o mejor guardar en una base de datos para despues actualizar
  #16 (permalink)  
Antiguo 03/11/2008, 11:08
Avatar de SUSMO  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 188
Antigüedad: 16 años
Puntos: 0
Respuesta: Duda sobre phpMailer

Si se ejecuta cuando se carga la página en el pop-up pero no me funciona. He provado poner antes del flush el ob_flush tal y como indica en la documentación de php pero tampoco lo hace.

Código PHP:
//Primera línea de mi script
echo "Enviando correo <br/>";
ob_flush();
flush();
.......
//For de envio de correos 
__________________
Perdida en el mundo del conocimiento
  #17 (permalink)  
Antiguo 03/11/2008, 11:11
Avatar de SUSMO  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 188
Antigüedad: 16 años
Puntos: 0
Respuesta: Duda sobre phpMailer

Samu22, tampoco me lo hace, y en este caso tiene sentido ya que se espera a que se ejecute el send y si éste ha ido bien muestra el mensaje con los puntitos.
__________________
Perdida en el mundo del conocimiento
  #18 (permalink)  
Antiguo 03/11/2008, 11:15
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años
Puntos: 16
Respuesta: Duda sobre phpMailer

me parece que es otro el error, tendrias que poner enviando antes de empezar, porque, vos estas mandando un solo mail, la condicion se cumple, pero no recorre de nuevo el script, es como si hicieras un echo y tardara 20 min en responder, no podrias poner una imagen mientras el servidor esta cargando el echo, mientras esta enviando el mail no te deja poner otra cosa, si lo logras hacer te va a poner el echo cuando haya terminado el proceso y no te va a servir, podrias usar ajax cuando envias el formulario
  #19 (permalink)  
Antiguo 03/11/2008, 11:22
Avatar de SUSMO  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 188
Antigüedad: 16 años
Puntos: 0
Respuesta: Duda sobre phpMailer

Ya me había planteado hacerlo con ajax pero en ese momento creí que no me haría falta :( supongo que me equivoqué. Indagaré un poco más a ver si encuentro alguna solución al respecto y sino optaré por esa solución.

Gracias!!!!
__________________
Perdida en el mundo del conocimiento
  #20 (permalink)  
Antiguo 03/11/2008, 11:23
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años
Puntos: 16
Respuesta: Duda sobre phpMailer

yo use hoy por primera vez, me fue medio complicado entenderlo jaja, pero esta muy bueno para darle mas comodidad al usuario
  #21 (permalink)  
Antiguo 03/11/2008, 11:32
Avatar de SUSMO  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 188
Antigüedad: 16 años
Puntos: 0
Respuesta: Duda sobre phpMailer

Bueno, buscando y buscando he encontrado un post en este mismo foro que creo es la solución a mi problema. Aquí os dejo el enlace por si os interesa hecharle un vistazo.

http://www.forosdelweb.com/f18/vario...ia-cpu-437965/
Saludos,
__________________
Perdida en el mundo del conocimiento
  #22 (permalink)  
Antiguo 03/11/2008, 12:14
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: Duda sobre phpMailer

Si te fijas, en una parte del script hace lo que te propuese: el echo y luego el flush(). Esta instrucción lo que hace es mandar al navegador lo que hay en el buffer (en éste caso el echo que acabamos de hacer) para seguir luego con la ejecución del script.

De todos modos me alegro de que hayas encontrado un script que sirva para tus propositos.
  #23 (permalink)  
Antiguo 04/11/2008, 05:23
Avatar de SUSMO  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 188
Antigüedad: 16 años
Puntos: 0
Respuesta: Duda sobre phpMailer

Hola Keysher,

Ya he visto que en ese post utilizan flush pero no se que estoy haciendo mal que no me funciona y el link a la página de donde sacaron la información ya no existe.

Me he leido la documentación de php y lo he utilizado de diferentes maneras. Pone que tiene que tener como mínimo 256 bytes de salida (yo tengo más), que depende de los navegadores... pero no tengo idea de pq me falla.

Me podrías poner el código de donde lo has utilizado, si sólo pones el echo y después el flush, si lo haces dentro de una página html... en fin, algo por donde seguir pq estoy atascada.

Muchas gracias
__________________
Perdida en el mundo del conocimiento
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 01:43.