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!