Foros del Web » Programando para Internet » PHP »

Modificar codigo para lista de correo simple

Estas en el tema de Modificar codigo para lista de correo simple en el foro de PHP en Foros del Web. Hola amigos del foro, estoy usando el siguiente codigo para enviar mensajes de correo a manera de una lista de correo muy sencilla. Código PHP: ...
  #1 (permalink)  
Antiguo 05/10/2008, 19:51
 
Fecha de Ingreso: enero-2007
Mensajes: 21
Antigüedad: 17 años, 10 meses
Puntos: 1
Modificar codigo para lista de correo simple

Hola amigos del foro, estoy usando el siguiente codigo para enviar mensajes de correo a manera de una lista de correo muy sencilla.
Código PHP:
<?php
//Conexion a la base de datos
include("config.php");

require(
"class.phpmailer.php");
$mail = new PHPMailer();
$mail->Host "smtp.1and1.com";
$mail->From "[email protected]";
$mail->FromName "List Manager";
$mail->Subject "Nuevo Servicio";

$result mysql_query("SELECT nombres, email FROM clientes"); 
while (
$row mysql_fetch_array($result)) {
    
// HTML body 
    
$body "Hola <strong>".$row["nombres"]."</strong>, "
    
$body.= "<p>Les comunicamos el nuevo servicio... <p>"
    
$body.= "<em>List manager</em>"
    
// Text body
    
$text "Hola ".$row["nombres"].", \n\n"
    
$text.= "Les comunicamos el nuevo servicio...\n\n"
    
$text.= "List manager";
    
// Configurar Email
    
$mail->Body $body
    
$mail->AltBody $text
    
$mail->AddAddress($row["email"], $row["nombres"]);
    
// Enviar el email
    
if(!$mail->Send()) {
        echo 
"Error al enviar a: " $row["email"] . "<br>"
     }
    
$mail->ClearAddresses();  
}
?>
El codigo funciona correctamente sobretodo por que la base de datos de clientes no contiene aun muchos registros, pero se añaden varios diariamente.
Mi consulta es sobre ese punto, como deberia modificar el codigo para realizar el envio por grupos cuando la base de datos sea mas extensa, para no superar el tiempo maximo de ejecucion de scripts en mi servidor, es que no se me ocurre como hacerlo.
Cualquier sugerencia sera bienvenida.
  #2 (permalink)  
Antiguo 05/10/2008, 19:58
Avatar de yrduk  
Fecha de Ingreso: enero-2007
Ubicación: Caracas, Venezuela
Mensajes: 277
Antigüedad: 17 años, 10 meses
Puntos: 3
Respuesta: Modificar codigo para lista de correo simple

Cita:
Iniciado por evil1176 Ver Mensaje
Hola amigos del foro, estoy usando el siguiente codigo para enviar mensajes de correo a manera de una lista de correo muy sencilla.
Código PHP:
<?php
//Conexion a la base de datos
include("config.php");

require(
"class.phpmailer.php");
$mail = new PHPMailer();
$mail->Host "smtp.1and1.com";
$mail->From "[email protected]";
$mail->FromName "List Manager";
$mail->Subject "Nuevo Servicio";

$result mysql_query("SELECT nombres, email FROM clientes"); 
while (
$row mysql_fetch_array($result)) {
    
// HTML body 
    
$body "Hola <strong>".$row["nombres"]."</strong>, "
    
$body.= "<p>Les comunicamos el nuevo servicio... <p>"
    
$body.= "<em>List manager</em>"
    
// Text body
    
$text "Hola ".$row["nombres"].", \n\n"
    
$text.= "Les comunicamos el nuevo servicio...\n\n"
    
$text.= "List manager";
    
// Configurar Email
    
$mail->Body $body
    
$mail->AltBody $text
    
$mail->AddAddress($row["email"], $row["nombres"]);
    
// Enviar el email
    
if(!$mail->Send()) {
        echo 
"Error al enviar a: " $row["email"] . "<br>"
     }
    
$mail->ClearAddresses();  
}
?>
El codigo funciona correctamente sobretodo por que la base de datos de clientes no contiene aun muchos registros, pero se añaden varios diariamente.
Mi consulta es sobre ese punto, como deberia modificar el codigo para realizar el envio por grupos cuando la base de datos sea mas extensa, para no superar el tiempo maximo de ejecucion de scripts en mi servidor, es que no se me ocurre como hacerlo.
Cualquier sugerencia sera bienvenida.

Se me ocurre que podrías usar límites en al consulta, como si fuera una paginación.

Algo así:

Código PHP:
<?php
//Conexion a la base de datos
include("config.php");

require(
"class.phpmailer.php");
$mail = new PHPMailer();
$mail->Host "smtp.1and1.com";
$mail->From "[email protected]";
$mail->FromName "List Manager";
$mail->Subject "Nuevo Servicio";

$registros 10;
$_GET[pagina] = $_GET[pagina];

if (!
$_GET[pagina]) {
   
$inicio 0;
   
$pagina 1;
}
else {
   
$inicio = ($_GET[pagina] - 1) * $registros;
}

$result_ mysql_query("SELECT nombres, email FROM clientes"); 
$total_registros mysql_num_rows($result_);
$total_paginas ceil($total_registros $registros);


$result mysql_query("SELECT nombres, email FROM clientes LIMIT $inicio, $registros"); 
while (
$row mysql_fetch_array($result)) {
    
// HTML body 
    
$body "Hola <strong>".$row["nombres"]."</strong>, "
    
$body.= "<p>Les comunicamos el nuevo servicio... <p>"
    
$body.= "<em>List manager</em>"
    
// Text body
    
$text "Hola ".$row["nombres"].", \n\n"
    
$text.= "Les comunicamos el nuevo servicio...\n\n"
    
$text.= "List manager";
    
// Configurar Email
    
$mail->Body $body
    
$mail->AltBody $text
    
$mail->AddAddress($row["email"], $row["nombres"]);
    
// Enviar el email
    
if(!$mail->Send()) {
        echo 
"Error al enviar a: " $row["email"] . "<br>"
     }
    
$mail->ClearAddresses();  
}
?>
<?php
if($total_paginas >= $_GET[pagina]) {
?>
<script type="text/javascript">location.href('');</script>
<?php
}
else
{
echo 
"<h1>Boletín enviado!</h1>";
}
?>

No estoy 100% seguro de que sirva, ya que no he probado.

Pruébalo tu, y cuéntanos si funcionó
__________________
Twitter/kudry
mkd.la - blog
  #3 (permalink)  
Antiguo 05/10/2008, 19:59
Avatar de yrduk  
Fecha de Ingreso: enero-2007
Ubicación: Caracas, Venezuela
Mensajes: 277
Antigüedad: 17 años, 10 meses
Puntos: 3
Respuesta: Modificar codigo para lista de correo simple

Cita:
Iniciado por yrduk Ver Mensaje
Se me ocurre que podrías usar límites en al consulta, como si fuera una paginación.

Algo así:

Código PHP:
<?php
//Conexion a la base de datos
include("config.php");

require(
"class.phpmailer.php");
$mail = new PHPMailer();
$mail->Host "smtp.1and1.com";
$mail->From "[email protected]";
$mail->FromName "List Manager";
$mail->Subject "Nuevo Servicio";

$registros 10;  // enviará 10 emails por cada recarga. Modifícalo a tu gusto :P
$_GET[pagina] = $_GET[pagina];

if (!
$_GET[pagina]) {
   
$inicio 0;
   
$pagina 1;
}
else {
   
$inicio = ($_GET[pagina] - 1) * $registros;
}

$result_ mysql_query("SELECT nombres, email FROM clientes"); 
$total_registros mysql_num_rows($result_);
$total_paginas ceil($total_registros $registros);


$result mysql_query("SELECT nombres, email FROM clientes LIMIT $inicio, $registros"); 
while (
$row mysql_fetch_array($result)) {
    
// HTML body 
    
$body "Hola <strong>".$row["nombres"]."</strong>, "
    
$body.= "<p>Les comunicamos el nuevo servicio... <p>"
    
$body.= "<em>List manager</em>"
    
// Text body
    
$text "Hola ".$row["nombres"].", \n\n"
    
$text.= "Les comunicamos el nuevo servicio...\n\n"
    
$text.= "List manager";
    
// Configurar Email
    
$mail->Body $body
    
$mail->AltBody $text
    
$mail->AddAddress($row["email"], $row["nombres"]);
    
// Enviar el email
    
if(!$mail->Send()) {
        echo 
"Error al enviar a: " $row["email"] . "<br>"
     }
    
$mail->ClearAddresses();  
}
?>
<?php
if($total_paginas >= $_GET[pagina]) {
?>
<script type="text/javascript">location.href('');</script>
<?php
}
else
{
echo 
"<h1>Boletín enviado!</h1>";
}
?>

No estoy 100% seguro de que sirva, ya que no he probado.

Pruébalo tu, y cuéntanos si funcionó
__________________
Twitter/kudry
mkd.la - blog
  #4 (permalink)  
Antiguo 05/10/2008, 20:00
Avatar de yrduk  
Fecha de Ingreso: enero-2007
Ubicación: Caracas, Venezuela
Mensajes: 277
Antigüedad: 17 años, 10 meses
Puntos: 3
Respuesta: Modificar codigo para lista de correo simple



Quise editar el mensaje, y terminé enviándolo de nuevo (citando).

Perdón
__________________
Twitter/kudry
mkd.la - blog
  #5 (permalink)  
Antiguo 06/10/2008, 19:16
 
Fecha de Ingreso: enero-2007
Mensajes: 18
Antigüedad: 17 años, 10 meses
Puntos: 0
Respuesta: Modificar codigo para lista de correo simple

Hola yrduk , tambien estaba trabajando en algo parecido y quisiera que me aclares un poco de tu codigo especificamente cual seria el proposito de esta linea y si deberia tener algo en el parentesis de location.ref
Código:
<script type="text/javascript">location.href('');</script>
Gracias por tu ayuda
  #6 (permalink)  
Antiguo 06/10/2008, 19:22
Avatar de yrduk  
Fecha de Ingreso: enero-2007
Ubicación: Caracas, Venezuela
Mensajes: 277
Antigüedad: 17 años, 10 meses
Puntos: 3
Respuesta: Modificar codigo para lista de correo simple

Cita:
Iniciado por evelyn2006 Ver Mensaje
Hola yrduk , tambien estaba trabajando en algo parecido y quisiera que me aclares un poco de tu codigo especificamente cual seria el proposito de esta linea y si deberia tener algo en el parentesis de location.ref
Código:
<script type="text/javascript">location.href('');</script>
Gracias por tu ayuda
El location.href() en javascript, se usa para redireccionar el navegador a una página nueva...

Por ejemplo:
Código:
<script type="text/javascript">location.href('http://www.google.com');</script>
Te redireccionaría a google

Para tu script, lo usaría para "navegar" entre los datos de la db automáticamente, como si de una paginación se tratase, a diferencia que ésta avanzaría automáticamente.

Saludos!
__________________
Twitter/kudry
mkd.la - blog
  #7 (permalink)  
Antiguo 06/10/2008, 20:49
 
Fecha de Ingreso: enero-2007
Mensajes: 21
Antigüedad: 17 años, 10 meses
Puntos: 1
Respuesta: Modificar codigo para lista de correo simple

Gracias por responder amigo yrduk, acabo de probar tu codigo, inicialmente con 15 correos para ver el funcionamiento y con el numero de registro: $registros = 8, el archivo con el codigo de el envio de emails lo llame lista.php, y la linea del javascript donde tengo alguna dudas la use de la siguiente forma
Código:
<script type="text/javascript">location.href('lista.php');</script>
Pero al probar el codigo en el servidor me crea un ciclo sin fin enviando el mensaje repetidamente a los primero 8 correos, por que creo que estoy teniendo el error precisamente en la linea esa de javascript. Cual debiera ser la modificacion en como llamo al lista.php en la funcion location.href
  #8 (permalink)  
Antiguo 06/10/2008, 20:55
Avatar de yrduk  
Fecha de Ingreso: enero-2007
Ubicación: Caracas, Venezuela
Mensajes: 277
Antigüedad: 17 años, 10 meses
Puntos: 3
Respuesta: Modificar codigo para lista de correo simple

Uupss!!! sí, perdón, creo que ese día estaba medio despistado

Me faltó poner el contenido de la redirección, que en éste caso sería

Código:
<script type="text/javascript">location.href('tu_script.php?pagina=<?php echo $_GET[pagina]+1; ?>');</script>
Y al final, todo el código, quedaría así:

Código PHP:
<?php
//Conexion a la base de datos
include("config.php");

require(
"class.phpmailer.php");
$mail = new PHPMailer();
$mail->Host "smtp.1and1.com";
$mail->From "[email protected]";
$mail->FromName "List Manager";
$mail->Subject "Nuevo Servicio";

$registros 10;  // enviará 10 emails por cada recarga. Modifícalo a tu gusto :P
$_GET[pagina] = $_GET[pagina];

if (!
$_GET[pagina]) {
   
$inicio 0;
   
$pagina 1;
}
else {
   
$inicio = ($_GET[pagina] - 1) * $registros;
}

$result_ mysql_query("SELECT nombres, email FROM clientes"); 
$total_registros mysql_num_rows($result_);
$total_paginas ceil($total_registros $registros);


$result mysql_query("SELECT nombres, email FROM clientes LIMIT $inicio, $registros"); 
while (
$row mysql_fetch_array($result)) {
    
// HTML body 
    
$body "Hola <strong>".$row["nombres"]."</strong>, "
    
$body.= "<p>Les comunicamos el nuevo servicio... <p>"
    
$body.= "<em>List manager</em>"
    
// Text body
    
$text "Hola ".$row["nombres"].", \n\n"
    
$text.= "Les comunicamos el nuevo servicio...\n\n"
    
$text.= "List manager";
    
// Configurar Email
    
$mail->Body $body
    
$mail->AltBody $text
    
$mail->AddAddress($row["email"], $row["nombres"]);
    
// Enviar el email
    
if(!$mail->Send()) {
        echo 
"Error al enviar a: " $row["email"] . "<br>"
     }
    
$mail->ClearAddresses();  
}
?>
<?php
if($total_paginas >= $_GET[pagina]) {
?>
<script type="text/javascript">location.href('tu_script.php?pagina=<?php echo $_GET[pagina]+1?>');</script> 
<?php
}
else
{
echo 
"<h1>Boletín enviado!</h1>";
}
?>
Lo que hace el script es verificar si el número total de páginas, es mayor a la página actual ($_GET[pagina])... si lo es, es porque existen más emails para enviar el boletín... entonces le suma 1, y lo ejecuta.

Disculpas de nuevo jeje!

Saludos!
__________________
Twitter/kudry
mkd.la - blog
  #9 (permalink)  
Antiguo 07/10/2008, 22:02
 
Fecha de Ingreso: enero-2007
Mensajes: 21
Antigüedad: 17 años, 10 meses
Puntos: 1
Respuesta: Modificar codigo para lista de correo simple

Amigo yrduk gracias por tu ayuda, al probar el codigo que me facilitaste encontre que tenia un pequeño problema, enviaba 2 veces el email a los primeros "n" correos con n=$registros, me explico, si definimos $registros = 10; como en el ejemplo entonces el mensaje les llega 2 veces a los primeros 10 clientes, realice unas pruebas y con algunos cambios ahora funciona al 100%.
Les dejo el codigo funcionando si es que le sirve a alguien.
Código PHP:
<?php 
//Conexion a la base de datos 
include("config.php"); 

require(
"class.phpmailer.php"); 
$mail = new PHPMailer(); 
$mail->Host "smtp.1and1.com"
$mail->From "[email protected]"
$mail->FromName "Lista de Correo"
$mail->Subject "Nuevo Servicio..."

$registros 10
$pagina $_GET[pagina]; 

if (!
$_GET[pagina]) { 
   
$inicio 0
   
$pagina 1

else { 
   
$inicio = ($pagina 1) * $registros


$result_ mysql_query("SELECT nombres, email FROM clientes");  
$total_registros mysql_num_rows($result_); 
$total_paginas ceil($total_registros $registros); 


$result mysql_query("SELECT nombres, email FROM clientes LIMIT $inicio, $registros");  
while (
$row mysql_fetch_array($result)) { 
    
// HTML body  
    
$body "Hola <strong>".$row["nombres"]."</strong>, ";  
    
$body.= "<p>Les comunicamos el nuevo servicio... <p>";  
    
$body.= "<em>List manager</em>";  
    
// Text body 
    
$text "Hola ".$row["nombres"].", \n\n";  
    
$text.= "Les comunicamos el nuevo servicio...\n\n";  
    
$text.= "List manager"
    
// Configurar Email 
    
$mail->Body $body;  
    
$mail->AltBody $text;  
    
$mail->AddAddress($row["email"], $row["nombres"]); 
    
// Enviar el email 
    
if(!$mail->Send()) { 
        echo 
"Error al enviar a: " $row["email"] . "<br>";  
     } 
    
$mail->ClearAddresses();   

?> 
<?php 
if($total_paginas >= $pagina) { 
?> 
<script type="text/javascript">location.href('lista.php?pagina=<?php echo $pagina+1?>');</script> 
<?php 

else 

echo 
"<h1>Boletín enviado!</h1>"

?>
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:45.