Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/08/2012, 04:50
breaststroke
 
Fecha de Ingreso: octubre-2010
Mensajes: 189
Antigüedad: 14 años, 2 meses
Puntos: 0
Pregunta envío de e-mails en un WHILE con Phpmailer

Hola, muy buenas.
Tengo un problema para enviar emails a través de una llamada a la base de datos con un While.
Si hago lo que voy a poner ahora pero con If en lugar de While, sí me funciona. Pero no sé porqué no me funciona con el While. De momento me envía sólo 1 e-mail (el que corresponde al primer campo) y la última parte del Update tampoco la realiza (sí lo hacía con el IF).
Éste es el código, algo poco complejo, yo creo:


Código PHP:

...
include(
'conexioninclude.php');
mysql_set_charset('utf8');
$registros=mysql_query("SELECT mail, name, password, codigo FROM alert WHERE status='on' AND language1='$language2' AND language2='$language1' AND way LIKE '%$way%' ORDER BY codigo",$conexion)or
 die(
"Problems at selectt:".mysql_error());
require(
"class.phpmailer.php");
$mail = new PHPMailer(); 
while(
$reg=mysql_fetch_array($registros))
{
$mailu=$reg['mail'];
$namee=$reg['name'];
$password=$reg['password'];
$codigo=$reg['codigo'];
$mail->IsSMTP();
$mail->Port 465;
$mail->SMTPSecure "ssl";                 
$mail->Host  "smtp.gmail.com";     
$mail->SMTPAuth true
$mail->Username "xxxxx"
$mail->Password "xxxxxx"// SMTP password
$webmaster_email "xxxxxx"//Reply to this email ID
$email="xxxxx"// Recipients email ID
$name="Admin"// Recipient's name
$mail->From "xxxxxx";
$mail->FromName "Sharinglanguage.com";
$mail->AddAddress($mailu,$namee);
$mail->AddReplyTo(xxxxxx,"Webmaster");
$mail->WordWrap 50// set word wrap
$mail->SetLanguage("en","/php/language/"); 
$mail->AddAttachment("/var/tmp/file.tar.gz"); 
$mail->AddAttachment("/tmp/image.jpg""phone.jpg"); 
$mail->AddAttachment("image.jpg""phone.jpg");  
$mail->IsHTML(true); // send as HTML
$mail->Subject "xxxxxxxxx";
$foto"imagess/bonito.jpg";
$mensaje='<font-color="#559999">

<img src="'
$foto .'" width="600"><br /><br />

Hello '
.$namee.',<br /><br />
xxxxxxxxxxxxxxxx .<br /><br />
Sincerely yours</font>'
;


$mail->MsgHTML($mensaje);

if(!
$mail->Send())
{
print<<<HERE
 message wasn't sent;
HERE;
}
else
{
$registros2=mysql_query("SELECT yep FROM vamos WHERE password='$password'",$conexion)or
 die(
"Problems at selectt:".mysql_error());
if(
$reg=mysql_fetch_array($registros))
{
$yep=$reg['yep']; // se trata de un campo tipo INT
$saw=$yep+1;
$registros3=mysql_query("UPDATE vamos
SET yep='$saw'
WHERE password='$password'"
,$conexion)or
die(
"Proble8uhims with selectttt:".mysql_error());
}
print<<<HERE
 success!;
HERE;
}
... 
Como decía, con IF funciona bien (además he usado el mismo script de phpmailer en muchas ocasiones antes y lo sigo usando y funciona bien), por lo que supongo que el fallo está en cómo codifico el While, pero no lo pillo, y eso que he usado scripts parecidos muchas veces. He de decir que mi tendencia con el tiempo ha sido la de intentar usar IF para el envío de e.mails pq con el WHILE termino teniendo problemas. Puede que haya algo (bastante básico o fundamental) que se me escapa. La verdad es que me haría feliz poder enviar e-mails con WHILE.
Bueno, agradecería un cable.

¡Un saludo!