Foros del Web » Programando para Internet » PHP »

Me sale toda la base de datos en Para:[PhpMailer]

Estas en el tema de Me sale toda la base de datos en Para:[PhpMailer] en el foro de PHP en Foros del Web. ¿Cómo puedo hacer para que cuando envio los correos a toda la base de datos no me salgan todos en el apartado "Para", sino que ...
  #1 (permalink)  
Antiguo 15/03/2006, 10:39
 
Fecha de Ingreso: marzo-2006
Mensajes: 28
Antigüedad: 18 años
Puntos: 0
Me sale toda la base de datos en Para:[PhpMailer]

¿Cómo puedo hacer para que cuando envio los correos a toda la base de datos
no me salgan todos en el apartado "Para", sino que me salga solo el del
destinatario correspondiente?
El código es el siguiente:(ya he probado haciendo "SELECT email FROM emails
WHERE ID=$ID" pero me dice:"Debe proveer al menos una dirección de email
como destinatario" o sea que no me lo reconoce)
Código PHP:
<?
  
// primero hay que incluir la clase phpmailer para poder instanciar
  //un objeto de la misma
  
require "includes/class.phpmailer.php";
   
//instanciamos un objeto de la clase phpmailer al que llamamos
  //por ejemplo mail
   
$mail = new phpmailer();
   
$mail->IsSMTP();
  
//Definimos las propiedades y llamamos a los métodos
  //correspondientes del objeto mail
  //Con PluginDir le indicamos a la clase phpmailer donde se
  //encuentra la clase smtp que como he comentado al principio de
  //este ejemplo va a estar en el subdirectorio includes
  
$mail->PluginDir "includes/";
  
//Con la propiedad Mailer le indicamos que vamos a usar un
  //servidor smtp
   
$mail->Mailer "smtp";
  
//Asignamos a Host el nombre de nuestro servidor smtp
  
$mail->Host "..............com";
  
//Le indicamos que el servidor smtp requiere autenticación
  
$mail->SMTPAuth false;
  
//Indicamos cual es nuestra dirección de correo y el nombre que
  //queremos que vea el usuario que lee nuestro correo
  
$mail->From "[email protected]";
  
$mail->FromName "EL MUSSOL";
  
$mail->IsHTML(true);
  
$mail->Timeout=300;
  include(
"../includes/configuracion.php");
  include(
"../includes/funciones.php");
 
$cnx conectar();
 
$res mysql_query("SELECT email FROM emails");
    
//elaboramos cadena de emails
  
while ($row mysql_fetch_array ($res)){//AQUI TENGO EL PROBLEMA pués genero toda la ristra de direcciones que aparecen en "Para:"  y habria de haber un bucle para que sólo me saliera el nombre de cada uno en su email

 
$mail->AddAddress ($row["email"]);

}if(
$_POST['asunto']){
  
//Asignamos asunto y cuerpo del mensaje
  //El cuerpo del mensaje lo ponemos en formato html, haciendo
  //que se vea en negrita
  
$mail->Subject "$asunto";
  
$mail->Body "<table width='100%' height='100%' border='0'
bgcolor='#990000'>"
;
  
$mail->Body .= "<tr><td><img
src='logo2.jpg' alt='elmussol' width='132'
height='125'/>"
;
    
$mail->Body .= "</td></tr><tr><td>";
   
$mail->Body .= "<font color='#FFFFFF'>".$propuesta."</font>";
  
$mail->Body .= "</td></tr><tr>";
  
$mail->Body .= "<td align='center'><font size= '2' color='#FFFFFF'>";
  
$mail->Body .= "<br><br><br>Estás recibiendo este email porque te
registraste para recibir las propuestas de EL MUSSOL...<br>Si no deseas
recibir más este email, por favor responde a este e-mail incluyendo
'Solicitud de baja' en el asunto.</font></td>"
;
  
$mail->Body .= "</tr></table>";

  
//Definimos AltBody por si el destinatario del correo no admite email con
formato html
  $mail
->AltBody "Tu editor de correo no acepta html";
}
  
//se envia el mensaje, si no ha habido problemas
  //la variable $exito tendra el valor true
  
$exito $mail->Send();


  
//Si el mensaje no ha podido ser enviado se realizaran 4 intentos mas como
mucho
  
//para intentar enviar el mensaje, cada intento se hara 5 segundos despues
  //del anterior, para ello se usa la funcion sleep
  
$intentos=1;
  while ((!
$exito) && ($intentos 5)) {
 
sleep(5);
      
//echo $mail->ErrorInfo;
      
$exito $mail->Send();
      
$intentos=$intentos+1;

   }


   if(!
$exito)
   {
 echo 
"Problemas enviando correo electrónico a ".$valor;
 echo 
"<br>".$mail->ErrorInfo;
   }
   else
   {
 echo 
"Mensaje enviado correctamente";
   }
    
$mail->ClearAddresses();
    
$mail->ClearAttachments();

?>
Una ayuda
Gracias
Gabi

Última edición por Cluster; 15/03/2006 a las 11:37
  #2 (permalink)  
Antiguo 15/03/2006, 11:45
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Tienes que enviar un e-mail por pasada que dá tu bucle que obtiene/extrae los resultados de tu consulta SQL ..

En tu caso lo cierras -antes- de enviarlo (del "$mail->send()" que se usa ..) por eso .. aunque usas el método "añadir" direcciones ($mail->Address(..)) y por otro lado las "limpias" (recuerda o te aviso que el método Address de PHP Mailer se comporta como un "acomulado"). No envias tu e-mail uno por uno por qué el bulcle (while( ...)) lo cierras antes del "send()" y todo es proceso de envio del e-mail junto con el "$mail->ClearAddresses();" que justamente elimina lo que tuviera acomulado "address" .. es decir .. como se comporta como "acomulador" y a cada "pasada" de tu bucle lo borras . .así consigues el efecto de enviar sólo de uno en uno.

Un saludo,
  #3 (permalink)  
Antiguo 15/03/2006, 12:17
 
Fecha de Ingreso: marzo-2006
Mensajes: 28
Antigüedad: 18 años
Puntos: 0
Me sale toda la base de datos en Para:[PhpMailer] Responder a Tema

un millon de gracias
que cosa más tonta me ha tenido 5 dias en vilo.
Por cierto otra cuestión:
El formulario de envio de los emails lo tengo con un htmlarea
El caso es que si pongo links o imagenes cuando llegan al correo estas no se ven y los links no funcionan porque salen entre \"link\" e imagen \" imagen \"
A que es debido?
solo funciona si voy al html del htmlarea y le borro las comillas a los links y a las imagenes pero eso es un coñazo para el cliente
gracias de nuevo
gabi
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 15:46.