Foros del Web » Programando para Internet » PHP »

Envio de correo a todos los contactos

Estas en el tema de Envio de correo a todos los contactos en el foro de PHP en Foros del Web. hola Hace un buen rato estoy intentando solucionar un error en mi codigo y no lo encuentro. Ante todo aclaro que descarte incluir el mensaje ...
  #1 (permalink)  
Antiguo 02/11/2010, 15:16
 
Fecha de Ingreso: septiembre-2010
Mensajes: 62
Antigüedad: 14 años, 1 mes
Puntos: 0
Envio de correo a todos los contactos

hola
Hace un buen rato estoy intentando solucionar un error en mi codigo y no lo encuentro.
Ante todo aclaro que descarte incluir el mensaje en formato html pues eso funciona perfectamente.
Este codigo funciona correctamente y me imprime en pantalla todos los emails que estan en la tabla correspondient.e haciendo los bucles tal como quiero que los haga.
Pero yo en realidad lo que quiero es que cada ciclo envie un correo con phpmailer
El codigo que uso para envio con phpmailer funciona perfectamente
Mas abajo pego el codigo con el agregado del envio de los mails
pero lo que sucede que envia uno y deja de enviar porque no le llega a phpmailer la direccion de correo
Gracias por ayudar,e a encontrar que estoy haciendo mal



Código PHP:
   function boletin() {
   
$hora date(" H:i:s");
   include 
'db2.php';
   
$EmailsNoEnviadosmysql_query("SELECT correo FROM Contactos  WHERE enviado = 1 LIMIT 2");
   echo 
"<font size='3'><b>Restan emails pendientes para ser enviados </b><br>";
   
$bucle=0;
   while (
$direccion mysql_fetch_assoc($EmailsNoEnviados)) {
   
$bucle=$bucle +1; echo "bucle ".$bucle."<BR>";

echo 
"Contacto de la tabla  ".$direccion['correo']."<br>";
$sqlEnviado mysql_query("UPDATE Contactos SET enviado = 2 WHERE correo = '" $direccion['correo'] . "'");
                                                             }
//Revisa si quedan emails por enviar
$EmailsNoEnviados mysql_query("SELECT correo FROM Contactos WHERE enviado = 1 LIMIT 2");

if (
mysql_num_rows($EmailsNoEnviados)<>0) {
echo 
$hora."<font size='3'><b> Inicio de espera </b><br>";
sleep(10);  boletin();
                                             }

if (
mysql_num_rows($EmailsNoEnviados)==0) { echo $hora."<font size='3'><b> Envio del boletín finalizado completamente</b>";}
                       }
boletin(); 
Código PHP:
   function boletin() {
   
$hora date(" H:i:s");
   include 
'db2.php';
   
$EmailsNoEnviadosmysql_query("SELECT correo FROM Contactos  WHERE enviado = 1 LIMIT 2");
   echo 
"<font size='3'><b>Restan emails pendientes para ser enviados </b><br>";
   
$bucle=0;
   while (
$direccion mysql_fetch_assoc($EmailsNoEnviados)) {
   
$bucle=$bucle +1; echo "bucle ".$bucle."<BR>";
//codigo para el envio de los mails
 
require "includes/class.phpmailer.php";
   
$mail->PluginDir "includes/";
   
$mail = new PHPMailer();
   
$mail->IsSMTP();
   
$mail->SMTPAuth true;
   
$mail->SMTPSecure "ssl";
   
$mail->Host "smtp.gmail.com";
   
$mail->Port 465;
   
$mail->Mailer "smtp";
   
$mail->Username "[email protected]";
   
$mail->Password "clave";
   
//remitente
   
$mail->From "[email protected]";
   
$mail->FromName "misitio.com";
   
$mail->Timeout=30;
   
$mail->Subject "Portal de ";
   
//en AltBody se envía el mensaje en texto plano
   
$mail->AltBody "mensaje en texto plano";
  
$mensaje="mensaje en formato html";

$mail->MsgHTML($mensaje);
$mail->AddAddress($direccion['correo'],"Estimado usuario/a");
$mail->IsHTML(true);
//la variable $exito tendra el valor true  si se envia el mensaje
$exito $mail->Send();
echo 
"Enviado ".$direccion['correo']."<br>";
$sqlEnviado mysql_query("UPDATE Contactos SET enviado = 2 WHERE correo = '" $direccion['correo'] . "'");
                                                             }
//Revisa si quedan emails por enviar
$EmailsNoEnviados mysql_query("SELECT correo FROM Contactos WHERE enviado = 1 LIMIT 2");

if (
mysql_num_rows($EmailsNoEnviados)<>0) {
echo 
$hora."<font size='3'><b> Inicio de espera </b><br>";
sleep(10);  boletin();
                                             }

if (
mysql_num_rows($EmailsNoEnviados)==0) { echo $hora."<font size='3'><b> Envio del boletín finalizado completamente</b>";}
                       }
boletin(); 
Simplemente agrego el codigo para el envio del mail y deje de funcionar correctamente y creo que no altero ningun proceso
Grac ias por ayudarme

Última edición por RicardoUY; 02/11/2010 a las 16:37
  #2 (permalink)  
Antiguo 02/11/2010, 16:41
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 9 meses
Puntos: 96
Respuesta: Envio de correo a todos los contactos

Saludos

Intenta de la siguiente manera

Código PHP:
<?php
function boletin() {
   require_once 
"includes/class.phpmailer.php";
   
$hora date(" H:i:s");
   include_once 
'db2.php';
   
   
$mail->PluginDir "includes/";
   
$mail = new PHPMailer();
   
$mail->IsSMTP();
   
$mail->SMTPAuth true;
   
$mail->SMTPSecure "ssl";
   
$mail->Host "smtp.gmail.com";
   
$mail->Port 465;
   
$mail->Mailer "smtp";
   
$mail->Username "[email protected]";
   
$mail->Password "clave";
   
//remitente
   
$mail->From "[email protected]";
   
$mail->FromName "misitio.com";
   
$mail->Timeout=30;
   
$mail->Subject "Portal de ";
   
//en AltBody se envía el mensaje en texto plano
   
$mail->AltBody "mensaje en texto plano";
  
$mensaje="mensaje en formato html";
    
$mail->MsgHTML($mensaje);
    
$EmailsNoEnviadosmysql_query("SELECT correo FROM Contactos  WHERE enviado = 1 LIMIT 2");
    while (
$direccion mysql_fetch_array($EmailsNoEnviados)) {
    
$correoElectronico=$direccion['correo'];
      
$mail->AddAddress($correoElectronico,"Estimado usuario/a");
      
$sqlEnviado mysql_query("UPDATE Contactos SET enviado = 2 WHERE correo = '" $direccion['correo'] . "'");

    }
$mail->IsHTML(true);
//la variable $exito tendra el valor true  si se envia el mensaje
$exito $mail->Send();

                                                             
//Revisa si quedan emails por enviar
$EmailsNoEnviados mysql_query("SELECT correo FROM Contactos WHERE enviado = 1 LIMIT 2");

if (
mysql_num_rows($EmailsNoEnviados)>0) {
echo 
$hora."<font size='3'><b> Inicio de espera </b><br>";
sleep(10);  boletin();
                                             }

if (
mysql_num_rows($EmailsNoEnviados)==0) { echo $hora."<font size='3'><b> Envio del boletín finalizado completamente</b>";}
                       }
boletin();  
?>
__________________
:.:Nano.:: @nano_hard - Retornando al foro
  #3 (permalink)  
Antiguo 02/11/2010, 17:08
 
Fecha de Ingreso: septiembre-2010
Mensajes: 62
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Envio de correo a todos los contactos

Descubir que lo que falla es la ultima parte, es decir cuando envia la primer tanda , hace la espera y ahi nunca logra obtenber la direccion siguiente
Hice una prueba y puse un numero mas alto en el primer Limit y los mando todos.
$EmailsNoEnviados= mysql_query("SELECT correo FROM Contactos WHERE enviado = 1 LIMIT 2");
cambie el 2 por un numero mas alto y los envio
o sea que lo que no anda bien es la ultima parte desde donde dice //Revisa si quedan emails por enviar

Los limit son bajos para hacer las pruebas pues tengo unos pocos correos ingresados para hacer pruebas
Luego los valores seran altos para enviar los mails por tandas pra no saturar el servidor con esperas mas amplias
o sea cuando vuelve a cargar la funcion para seguir envaindo ya se perdieron los valores de las direcciones

Gracias por ayudarme

Última edición por RicardoUY; 02/11/2010 a las 17:33

Etiquetas: contactos, correo, envio
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 22:21.