Foros del Web » Programando para Internet » PHP »

enviar muchos correos con PHP

Estas en el tema de enviar muchos correos con PHP en el foro de PHP en Foros del Web. Buenos días. hoy tengo una duda, hice un pequeño sistema de boletin que se encargaba de enviar correos a todos los contactos en mi lista ...
  #1 (permalink)  
Antiguo 02/01/2007, 20:50
Avatar de mafima  
Fecha de Ingreso: abril-2003
Ubicación: Medellin-Colombia
Mensajes: 1.109
Antigüedad: 21 años
Puntos: 24
enviar muchos correos con PHP

Buenos días.

hoy tengo una duda, hice un pequeño sistema de boletin que se encargaba de enviar correos a todos los contactos en mi lista ( una base de datos ) el asunto es que utilizaba la funcion MAIL() de PHP y la metia en un FOR, para enviar un correo a cada persona, el correo desde luego contiene la misma informacón solo que cambiaba datos como nombre y mail de la persona.

Lo que sucede es que la lista ya se ha hecho bastante numerosa, hay mas de 4000 contactos y por cuestiones del servidor, no permite enviar tantos correos tan seguidamente, habia pensado en separarlos en grupos de 500 pero me parece muy tedioso tener que efectuar la operacion manualmente, lo que quiero es saber si hay alguna manera de hacer que el envio pare por un determinado tiempo y luego continue, o si hay alguna manera diferente de hacer esto.

De antemano muchas gracias.
__________________
SEO en Medellin
  #2 (permalink)  
Antiguo 02/01/2007, 21:55
Avatar de vevni  
Fecha de Ingreso: julio-2005
Ubicación: cancun mexico
Mensajes: 598
Antigüedad: 18 años, 9 meses
Puntos: 3
Re: enviar muchos correos con PHP

usa las faqs, hay mucha informacion, por eso es que no te han contestado, hace casi diario se pregunta lo mismo..... usa el buscador y hallaras mucha informacion.. saludos!
__________________
Código PHP:
echo"hola mundo ver 1221332143.02";
echo
"cuantos usuarios habran impreso hola mundo en el mundo.!???"
  #3 (permalink)  
Antiguo 02/01/2007, 22:31
Avatar de mafima  
Fecha de Ingreso: abril-2003
Ubicación: Medellin-Colombia
Mensajes: 1.109
Antigüedad: 21 años
Puntos: 24
Re: enviar muchos correos con PHP

Pues pueden ser dos cosas:

1. entendiste mal mi rpegunta y por eso estas diciedno lo que dijiste.

2. o verdaderamente BUSCO mal.

personalmente siempre busco antes de rpeguntar, siempre, en primer lugar por que me resulta mucho mas conveniente encontrar la respuesta que esperar a que alguien me responda.

Cuando hice la pregunta, esto es 20 minutos antes de tu respuesta, encontre solo dos posts que sumariamente trataban lo que necesitaban, en uno la respuesta era enviar en grupos de a diez utilizando la CCO ( copia oculta) esto no me sirve por que mi correo cambia dependiendo del nombre de la persona, pues por lo general comienza con un saludo personalizado, e incluso incluyo otros datos, entonces no me sirve enviar el mismo correo.

Si tienes la URL exacta de las FAQ's te lo agradecería pues haciendo una busqueda en ellas tampoco localice algo que pudiera dar solucion a mi problema.

yo creo que antes de lanzar una acusación se debería de detener a pensar en el contenido de la misma.

Cualquier información es muy valiosa para mi, de antemano muchas gracias
__________________
SEO en Medellin

Última edición por mafima; 02/01/2007 a las 22:52
  #4 (permalink)  
Antiguo 03/01/2007, 06:35
Avatar de blakeyed  
Fecha de Ingreso: marzo-2004
Ubicación: Ahora mismo, Málaga
Mensajes: 78
Antigüedad: 20 años
Puntos: 0
Re: enviar muchos correos con PHP

En php . net , busca la función mail() en los comentarios está lo que buscas. No puedo publicar enlaces en el foro todavía :(
Conectas al servidor SMTP
y sin cerrarlo mandas más servidores. Yo tengo un sistema parecido montado y funciona perfectamente.

Saludos
__________________
Saludos

Gaspar Fernández
Poesía Binaria
  #5 (permalink)  
Antiguo 03/01/2007, 06:51
Avatar de cleek  
Fecha de Ingreso: diciembre-2006
Ubicación: Atras del cocodrilo
Mensajes: 122
Antigüedad: 17 años, 4 meses
Puntos: 1
Re: enviar muchos correos con PHP

No es posible detener un script y hacer que corra  desde donde se quedó porque en php se tiene un lim ite de tiempo de ejecucion que despues de eso se c orta la ejecucion y nada se guarda.

Una solucion para tu problema seria no hacerlo con el php sino con un
Código:
<META HTTP-EQUIV=Refresh CONTENT="10; URL=index.php?offset=[algun valor]">
y asi los separas mediante el offset para que solo  lo tengas que ejecutar una vez, te vas a comer, a  ver una pelicula o algo y cuando regreses ya está .


Otra opcion es con cronjobs pero creo que te conviene mas la otra
  #6 (permalink)  
Antiguo 03/01/2007, 07:28
 
Fecha de Ingreso: octubre-2004
Ubicación: Barcelona
Mensajes: 195
Antigüedad: 19 años, 5 meses
Puntos: 7
Re: enviar muchos correos con PHP

Se me ocurre que podrias hacerlo con sesiones y haciendo consultas a la base de datos con select que tengan un límite (como "SELECT * FROM tabla LIMIT $contador, $offset").

En el primer paso creas una variable de sesión como contador que pones inicialmente con valor 0 y otra limite con el número de registros, si tienen datos en la siguiente iteración (esto puedes hacerlo con un link para recargar manualmente la página pasado el tiempo que veas que tu isp considera prudencial o con Refresh como te han dicho antes) le sumas 500 al contador hasta que has llegado al límite de número de registros...
  #7 (permalink)  
Antiguo 04/01/2007, 10:14
Avatar de mafima  
Fecha de Ingreso: abril-2003
Ubicación: Medellin-Colombia
Mensajes: 1.109
Antigüedad: 21 años
Puntos: 24
Re: enviar muchos correos con PHP

bueno disculpen mi tardanza.

esta ultima opción que me das pintix no me gusta por que precisamente tengo que estar pendiente del sistema para enviar todos los correos, quiero hacerlo lo más automatico posible.

En cuanto hacer recargar la pagina es una idea, estaba averiguando un poco y quiciera saber si

Código PHP:
<META HTTP-EQUIV=Refresh CONTENT="10; URL=index.php?offset=[algun valor]"
es compatible con todos los navegadores o no, en cuanto a lo que mensiono blakeyed no se bien a que se refiere, estuve buscando y solo encontre este link:
http://www.php.net/manual/es/ref.mail.php#66729

decia esto:
Cita:
mail() opens a new connection for each email it sends out which causes some significant overhead if you're sending out many emails in one go.

You can avoid this by using sockets like Antony Male has done and then send as many emails as you like through the same connection. It should be noted however that some MTA's will reject your emails after you've sent over a certain threshold on the same connection (about 10 would be normal) so it's worth disconnecting and reconnecting periodically.

I'm surprised nobody has drawn attention to PHPMailer (http://phpmailer.sourceforge.net) which makes this sort of stuff really easy. Even better still is Swift Mailer by Chris Corbyn (http://www.swiftmailer.org) because it includes plugin support and it's tighter.

Another thing that's bitten me before is Magic Quotes! If it's turned on and you're sending attachments that seem to arrive corrupted it's more than likely because your attachments are full of backslashes.

Hope the links might be useful to some people :)
como mi ingles es un poco malo lo pego aca para que me ayuden a entender si esto me sirve o no.

Bueno muchas gracias por sus respuestas.
__________________
SEO en Medellin
  #8 (permalink)  
Antiguo 04/01/2007, 10:29
Avatar de blakeyed  
Fecha de Ingreso: marzo-2004
Ubicación: Ahora mismo, Málaga
Mensajes: 78
Antigüedad: 20 años
Puntos: 0
Re: enviar muchos correos con PHP

Disculpa, me refería a enviar varios correos con la misma conexión.
Estableces una conexión SMTP al servidor. Ten en cuenta que la función mail() conecta y desconecta cada vez que la llamas por lo que tarda más, y es posible que algún envío no salga bien porque el servidor detecte que reconectas muchas veces.

Copio y pego desde php.net (he puesto también un par de notas entre medias

Cita:
function mymail($to,$subject,$message,$headers)
{

// set as global variable
global $GLOBAL;

// get From address
if ( preg_match("/From:.*?[A-Za-z0-9\._%-]+\@[A-Za-z0-9\._%-]+.*/", $headers, $froms) ) {
preg_match("/[A-Za-z0-9\._%-]+\@[A-Za-z0-9\._%-]+/", $froms[0], $fromarr);
$from = $fromarr[0];
}

// Open an SMTP connection
$cp = fsockopen ($GLOBAL["SMTP_SERVER"], $GLOBAL["SMTP_PORT"], &$errno, &$errstr, 1);
if (!$cp)
return "Failed to even make a connection";
$res=fgets($cp,256);
if(substr($res,0,3) != "220") return "Failed to connect";

// Say hello...
fputs($cp, "HELO ".$GLOBAL["SMTP_SERVER"]."\r\n");
$res=fgets($cp,256);
if(substr($res,0,3) != "250") return "Failed to Introduce";

// perform authentication
fputs($cp, "auth login\r\n");
$res=fgets($cp,256);
if(substr($res,0,3) != "334") return "Failed to Initiate Authentication";

fputs($cp, base64_encode($GLOBAL["SMTP_USERNAME"])."\r\n");
$res=fgets($cp,256);
if(substr($res,0,3) != "334") return "Failed to Provide Username for Authentication";

fputs($cp, base64_encode($GLOBAL["SMTP_PASSWORD"])."\r\n");
$res=fgets($cp,256);
if(substr($res,0,3) != "235") return "Failed to Authenticate";


/* AQUI INICIAMOS EL BUCLE PARA MANDAR CORREOS. Vamos cambiando las direcciones de destinatario y los cuerpos de mensajes si queremos para llamar dentro del email a los usuarios por su nombre si queremos*/


// Mail from...
fputs($cp, "MAIL FROM: <$from>\r\n"); // Aqui pones tu dirección
$res=fgets($cp,256);
if(substr($res,0,3) != "250") return "MAIL FROM failed";

// Rcpt to...
fputs($cp, "RCPT TO: <$to>\r\n"); // Aquí la dirección del destinatario
$res=fgets($cp,256);
if(substr($res,0,3) != "250") return "RCPT TO failed";

// Data...
fputs($cp, "DATA\r\n");
$res=fgets($cp,256);
if(substr($res,0,3) != "354") return "DATA failed";

// Send To:, From:, Subject:, other headers, blank line, message, and finish
// with a period on its own line (for end of message)
fputs($cp, "To: $to\r\nFrom: $from\r\nSubject: $subject\r\n$headers\r\n\r\n$message\r\n.\r\n");

// Respeta los \r\n pero cambia los datos que aparecen si quieres.

$res=fgets($cp,256);
if(substr($res,0,3) != "250") return "Message Body Failed";


// FIN DE TU BUCLE


// ...And time to quit...
fputs($cp,"QUIT\r\n");
$res=fgets($cp,256);
if(substr($res,0,3) != "221") return "QUIT failed";

return true;
}
Saludos
__________________
Saludos

Gaspar Fernández
Poesía Binaria
  #9 (permalink)  
Antiguo 04/01/2007, 15:35
Avatar de mafima  
Fecha de Ingreso: abril-2003
Ubicación: Medellin-Colombia
Mensajes: 1.109
Antigüedad: 21 años
Puntos: 24
Re: enviar muchos correos con PHP

a ok, entiendo.

pero me surge una pregunta, el problema que surge cuando se envian correos a muchas personas es unicamente por reconectarse tantas veces? o es por que el servidor tiene un limite de enviar determinada cantidad de correos en determinado tiempo, si hay un limite como averiguo este?

un saludo
__________________
SEO en Medellin
  #10 (permalink)  
Antiguo 04/01/2007, 15:52
Avatar de blakeyed  
Fecha de Ingreso: marzo-2004
Ubicación: Ahora mismo, Málaga
Mensajes: 78
Antigüedad: 20 años
Puntos: 0
Re: enviar muchos correos con PHP

Por enviar muchos correos lo más que puede pasar es que termine el tiempo de ejecución de tu script.

De todas formas tu proveedor SEGURO que tiene un límite y no sé si lo podrás mirar, lo suyo es preguntarlo; a mí no me dijeron nada, sólo me dijeron que tengo que mandar muuchos correos...

Lo que también puedes hacer es que el script lleve una cuenta de los correos que lleva mandados y los que le quedan y cada vez que lo ejecutes envías unos cuantos, lo metes en CRON y te despreocupas durante unas horas que ya se irán enviando. Si no tienes posibilidad de incluirlo en CRON también puedes, si es un envío puntual de emails, ejecutar el script desde tu navegador y que la página se actualice cada cierto tiempo.


Saludos
__________________
Saludos

Gaspar Fernández
Poesía Binaria
  #11 (permalink)  
Antiguo 04/01/2007, 16:13
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Re: enviar muchos correos con PHP

Como bien dice blakeyed estas son las maneras mas comunes (hay otros métodos que usan listas/grupos, por ejemplo las de yahoo, para el envio). La que mas me resulta es la del cron, con un script que se auto llama paginandose (De la misma manera que paginas noticias y le pones un link a la pagina siguiente, aca paginas destinatarios haceindo un header a ese mismo link).
Este proceso puede tener una tabla de enviados y cuando levanta usuarios joinea con esta viendo que no se haya enviado. Con esto podes armarte varios cron en el día como para subdividir los paquetes que te arme el paginado.

Y a todo esto afirmo lo que se dijo de que los host muchas veces ponen un limite diario total.

Si necesitas algún código de lo que comento pedilo.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #12 (permalink)  
Antiguo 04/01/2007, 16:29
 
Fecha de Ingreso: febrero-2002
Ubicación: Chile
Mensajes: 1.573
Antigüedad: 22 años, 1 mes
Puntos: 2
Re: enviar muchos correos con PHP

http://www.forosdelweb.com/f18/varios-emails-uso-memoria-cpu-437965/

creo que alli sale como lo solucione si no dispones mas que unos pocos recursos, con phpmailer y alguno q otro truco
  #13 (permalink)  
Antiguo 05/01/2007, 14:14
Avatar de mafima  
Fecha de Ingreso: abril-2003
Ubicación: Medellin-Colombia
Mensajes: 1.109
Antigüedad: 21 años
Puntos: 24
Re: enviar muchos correos con PHP

muchas gracias a todos,a unque aun no escribo el codigo parece que la solucion que plantea NRLABS es muy buena, me gusta mucho.
__________________
SEO en Medellin
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.
Tema Cerrado

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 20:34.