Foros del Web » Programando para Internet » PHP »

newsletter con mail()

Estas en el tema de newsletter con mail() en el foro de PHP en Foros del Web. Hola a tod@s! Utilizo la funcion mail() para enviar una newsletter a los usuarios suscritos. Hay unos 400. Este es el script: Código PHP: $base ...
  #1 (permalink)  
Antiguo 07/11/2008, 07:58
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Pregunta newsletter con mail()

Hola a tod@s!

Utilizo la funcion mail() para enviar una newsletter a los usuarios suscritos. Hay unos 400.

Este es el script:
Código PHP:
$base="base";
$tabla="newsletter";
$con=mysql_connect("localhost","basededatos","password");
mysql_select_db($base,$con);
mysql_query ("SET NAMES 'utf8'");
$consultamysql_query("SELECT email FROM $tabla",$con);

$headers  'MIME-Version: 1.0' "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' "\r\n";
$headers .= 'From: mail <[email protected]>' "\r\n";
$headers .= 'Bcc: [email protected]"\r\n";

while (
$clave mysql_fetch_array($consulta)){
       
$emaila $clave[0]. "; ";
       if(
mail($emaila$asunto$comentario,$headers)){
echo 
"Tu e-mail se ha enviado a ",$emaila,"<br />";
}else{
echo 
"Se ha producido un error al enviar el mail a:",$emaila;
}} 
El problema es que, aparentemente, el script peta despues de enviar 144 e-mails, y los usuarios que se encuentran a partir de la fila 144 en la base de datos no reciben la newsletter,... alguien sabe como solucionarlo??

Muchas gracias de antemano!
Saludos
  #2 (permalink)  
Antiguo 07/11/2008, 08:02
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 18 años, 9 meses
Puntos: 6
Respuesta: newsletter con mail()

Hola donfalcone,

Sin tocar nada, podrias probar con set_time_limit cambiar el tiempo maximo de ejecución de PHP.

Si eso no funciona o no te sirve podrias separar el envio de 400 en varios de 100 (por ejemplo). Sería como "paginar" la consulta de a 100 resultados, enviar esos 100, esperar unos segundos y seguir con los siguientes. Maneras de hacer esto hay varias pero esa es la idea básicamente.

Saludos
__________________
Federico.

Mi página: www.jourmoly.com.ar
  #3 (permalink)  
Antiguo 08/11/2008, 05:20
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: newsletter con mail()

Hola Firdureiks,

Gracias por tu ayuda

Cita:
podrias separar el envio de 400 en varios de 100 (por ejemplo)
?Cómo puedo hacer eso? Separar el envio en bloques de 100?

Muchas gracias de antemano.

Saludos!
  #4 (permalink)  
Antiguo 08/11/2008, 05:41
(Desactivado)
 
Fecha de Ingreso: diciembre-2006
Mensajes: 529
Antigüedad: 17 años, 5 meses
Puntos: 11
Respuesta: newsletter con mail()

Yo solucioné ese problema con in script que consulta la tabla "pendientes" de allí saca diez direcciones envía los emails y actualiza el estado y termina.

Al terminar un javascript después de 5 seg actualiza la página y así sucesivamente.

Cuando la lista pendientes está vacia entonces ahi la página en vez de generar el javascript de actualizaci´pon genera un mensaje que diga "envío finalizado".

Entonces así mandas los emails de a poco sin saturar el servidor.
Además te recomiendo que uses PHPMailer en vez de la funcioón mail().

Espero que te sirva mucha suerte.
  #5 (permalink)  
Antiguo 08/11/2008, 12:47
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: newsletter con mail()

Hola,

?Hay alguna manera de hacer esto con PHP?

Me han comentado usando la funcion sleep(), pero ?cómo?

Muchas gracias!
Saludos
  #6 (permalink)  
Antiguo 08/11/2008, 21:15
 
Fecha de Ingreso: julio-2005
Mensajes: 204
Antigüedad: 18 años, 9 meses
Puntos: 1
Respuesta: newsletter con mail()

Aprovecho esto para no crear un nuevo tema, En el index de mi página web,en la parte de susperior hay un campo de texto que funciona como newsletter, en el que dejando su e-mail me llega a mi casilla,hasta ahi va todo bien,ahora quisiera que eso sea almacenado en una base de datos,así esta todo junto cunado quiero mandarle información a los usuarios que se suscribieron.
Saludos
  #7 (permalink)  
Antiguo 10/11/2008, 11:40
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: newsletter con mail()

Hola,

?Sabe alguien como hacer una pausa en el script cada 100 envios?

Gracias de antemano

Código PHP:
$base="base";
$tabla="newsletter";
$con=mysql_connect("localhost","basededatos","password");
mysql_select_db($base,$con);
mysql_query ("SET NAMES 'utf8'");
$consultamysql_query("SELECT email FROM $tabla",$con);

$headers  'MIME-Version: 1.0' "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' "\r\n";
$headers .= 'From: mail <[email protected]>' "\r\n";
$headers .= 'Bcc: [email protected]"\r\n";

while (
$clave mysql_fetch_array($consulta)){
       
$emaila $clave[0]. "; ";
       if(
mail($emaila$asunto$comentario,$headers)){
echo 
"Tu e-mail se ha enviado a ",$emaila,"<br />";
}else{
echo 
"Se ha producido un error al enviar el mail a:",$emaila;
}} 
  #8 (permalink)  
Antiguo 13/11/2008, 20:57
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Pregunta Respuesta: newsletter con mail()

Hola a tod@s!

Básicamente lo que quiero aconseguir es separar el envio por pequenos grupos, con el código actual no me funciona.

Tras días de intentos fallidos y al borde de la desesperación,... este el script que sigue sin funcionar:

Código PHP:
$base="base";
$tabla="newsletter";
$con=mysql_connect("localhost","basededatos","password");
mysql_select_db($base,$con);
mysql_query ("SET NAMES 'utf8'");
$consultamysql_query("SELECT email FROM $tabla",$con);

$headers  'MIME-Version: 1.0' "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' "\r\n";
$headers .= 'From: mail <[email protected]>' "\r\n";
$headers .= 'Bcc: [email protected]"\r\n";

while (
$clave mysql_fetch_array($consulta)){
       
$emaila $clave[0]. "; ";
       if(
mail($emaila$asunto$comentario,$headers)){
echo 
"Tu e-mail se ha enviado a ",$emaila,"<br />";
sleep(2);
}else{
echo 
"Se ha producido un error al enviar el mail a:",$emaila;
}} 
?Alguién sabe como puedo hacerlo para enviar una newsletter a 400 e-mails sin que el envio se interrumpta despues de 140 envios?

Gracias de antemano y saludos!
  #9 (permalink)  
Antiguo 13/11/2008, 23:35
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Respuesta: newsletter con mail()

pues asi de entrada podrias usar en el query la opciom limit para que selecciones en bloques, no se de 50 y despues realizar el query de forma recursiva

select * from pais limit 180,10
claro usando tambien el sleep(45);

es algo que se me ocurre men

saludos
__________________
gerardo
  #10 (permalink)  
Antiguo 14/11/2008, 08:19
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: newsletter con mail()

Hola Calchis,

Entiendo el concepto, pero no sé cómo poner eso en el código.

Cita:
select * from pais limit 180,10
claro usando tambien el sleep(45);
Cómo puedo ponerlo en mi código,
Código PHP:
$consultamysql_query("SELECT email FROM $tabla",$con);

$headers  'MIME-Version: 1.0' "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' "\r\n";
$headers .= 'From: mail <[email protected]>' "\r\n";
$headers .= 'Bcc: [email protected]"\r\n";

while (
$clave mysql_fetch_array($consulta)){
       
$emaila $clave[0]. "; ";
       if(
mail($emaila$asunto$comentario,$headers)){
echo 
"Tu e-mail se ha enviado a ",$emaila,"<br />";
sleep(2);
}else{
echo 
"Se ha producido un error al enviar el mail a:",$emaila;
}} 
Gracias de antemano,
Saludos!
  #11 (permalink)  
Antiguo 14/11/2008, 10:14
 
Fecha de Ingreso: abril-2006
Mensajes: 1.128
Antigüedad: 18 años
Puntos: 33
Respuesta: newsletter con mail()

donfalcone:
lo que puedes hacer es lo siguiente ->
1.- si el archivo es php, ponle arriba o al inicio como su fuera html
asi:
<html>
<head>
Aqui pones un META TAG para refresh cada 30 segundos o lo que tu quieras.
</head>
<body>
<?php
Tu codigo....
?>
</body>
</html>
2.- El codigo php, utiliza variables de sesion asi:
primero haces un session_start();
3.- donde dice: (Iria de esta manera->
$x = $_SESSION['control'];
while ($clave = mysql_fetch_array($consulta)){
if(!$x) { $emaila = $clave[0].";";
} else { $emaila = $clave[$x]. "; ";
}
if(mail($emaila, $asunto, $comentario,$headers)){
echo "Tu e-mail se ha enviado a ",$emaila,"<br />";
$y = $_SESSION['control'] + 10;
$x++;
if($x == "$y") {
$_SESSION['control'] = $x;
exit();
}
}

Explicacion:
Cuando la pagina hace el primer refresh $x no tiene valor y por ende toma el valor de [0], despues te envia los primeros diez (10) correos y la variable de session toma el valor de 10; cuando hace el segundo refresh ya la variable de sesion tiene un valor de 10 y $y tiene un valor de 20, cuando $x alcanza los 20 y es igual a $y pone la variable de session en 20 y sale a esperar por el siguiente refresh.
Y asi sucesivamente.
Saludos
Y espero te ayude
Franco
  #12 (permalink)  
Antiguo 14/11/2008, 11:37
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: newsletter con mail()

Hola Franco,

Gracias por tu ayuda, funcionara mi código a pesar de que envio el "asunto" y el "mensaje" a través de un formulario?

Es decir el php que he escrito, es un action=".php" de un formulario. En el formulario escribo el mensaje y el asunto, el php los recoge como variables y los inserta en el mail.

Dadas las circunstancias, ?Crees que funcionará el script que me comentabas?

Muchas gracias!
Saludos!
  #13 (permalink)  
Antiguo 15/11/2008, 14:08
 
Fecha de Ingreso: abril-2006
Mensajes: 1.128
Antigüedad: 18 años
Puntos: 33
Respuesta: newsletter con mail()

donfalcone:
Lo que te he expuesto o mejor dicho algo parecido lo utilizo con exito
para enviar correos de 10 en 10 desde mi web, utilizando una pagina similar que este refresh cada 60 segundos.
Ya que he analizado bien mi servidor de correo y he podido constatar que me envia hasta 40 correos en un periodo de 60 segundos sin problema ni retrasos.
A mi me ha servido de mucho.
Saludos
Franco
P.S. Lo que te he expuesto debes adecuarlo a tu caso especifico pero la esencia prevalece. Lo que prevalece es las sesiones, el meta tag-refresh y la parte incremental de la busqueda en tu base de datos.
P.S.2. recuerda que 40 correos en 60 segundos nos da 2.400 por hora y asi sucesivamente; es decir que el envio masivo de correos debe tomar en consideracion el ancho de banda, el servidor de correo que utilizas y el tamaño del correo a enviar. Cuando te hable de 40 por cada 60 segundos, me refiero a correos sin archivos adjuntos ni nada extra; es decir correos sencillos y corrientes de texto simple.
  #14 (permalink)  
Antiguo 16/11/2008, 14:03
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: newsletter con mail()

Gracias Franco,

Lo pongo en práctica y te comento!

saludos!
Donfalcone
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:00.