PHP - Email Masivo

   
Vista:

Email Masivo

Publicado por Diego (25 intervenciones) el 18/12/2014 20:49:25
Buenas tardes!! Estoy implementando un codigo para envio de un correo a email's guardados en una base de datos. Son mas de 400 y puedo enviar 150 por hora.. en este momento estoy probando con 20 emails, el punto es que llega al 18 y se cuelga si pongo un sleep de 30 que es mas o menos lo que deberia enviar en una hora, si pongo menos llega a los 20 bien, nose porque pasa esto... alguna sugerencia, muestro el codigo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?php
ignore_user_abort(1); // sigue ejecutando aunque el usuario halla cerrado la conexión 
set_time_limit(0); // el script no tiene límite de tiempo
//Recibir todos los parámetros del formulario
require_once('class.phpmailer.php');
require_once('class.smtp.php');
 
//Recibir todos los parámetros del formulario
$asunto = $_POST['asunto'];
$texto=$_POST['texto'];
$conexion=mysqli_connect("localhost",bdd","","namebd")or die("Error al conectar con la base de datos");
$registros=mysqli_query($conexion,"select * from correo")or die(mysqli_error($conexion));
$ofertas = "<html>
		<head>
			<title>Ofertas</title>
		</head><p>".
$ofertas .= str_replace("\n","<br/>",$texto).
			"</p>
			<table border='1' cellpadding='0' cellspacing='0' width='500' bgcolor='#F6F6F6' bordercolor='#FFFFFF'>
			<tr>
			<td width='50' style='font-weight: bold'>Descripcion</td>
			<td width='50' style='font-weight: bold'>Imagen</td>
			<td width='50' style='font-weight: bold'>Precio</td>
</tr> ";
while($reg = mysqli_fetch_array($registros)) {
	$ruta = 'http://mipagina.com.ar/imageneslista/'.$reg['imagen'];
	$ofertas .= "
		<body>
			<tr>
				<td><br>".$reg['descripcion']."<br><br></td>
				<td><img src=".$ruta." width='300px' height='300px'></td>
				<td>$".$reg['precio']."</td>
			</tr>
		</body>
	</html>";
}

$registrosemail=mysqli_query($conexion,"select email from prueba ORDER BY id ASC")or die(mysqli_error($conexion));
while($datosemail=mysqli_fetch_array($registrosemail)){
$mail = new PHPMailer();
$mail->IsSMTP;
$mail->SMTPAuth = true;
$mail->SMTPSecure = "ssl";
$mail->Username = "miemail@miemail.com"; // Correo completo a utilizar
$mail->Password = "pass"; // Contraseña
$mail->Port = 465; // Puerto a utilizar"
 
$mail->From = "miemail@miemail.com";
$mail->FromName = "nombre";
$mail->CharSet = "UTF-8";
 
$mail->AddAddress($datosemail['email']); // Esta es la dirección a donde enviamos
$mail->IsHTML(true); // El correo se envía como HTML
$mail->Subject = $asunto; // Este es el titulo del email.
$mail->Body = $ofertas; // Mensaje a enviar
$mail->Send(); // Envía el correo.
sleep(20);
}
$registros=mysqli_query($conexion,"delete from correo")or die(mysqli_error($conexion));
mysqli_close($conexion);
?>

Muchas gracias, disculpen la molestia
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

Email Masivo

Publicado por xve (5685 intervenciones) el 18/12/2014 21:51:31
Hola Diego, cuando dices que se cuelga, a que te refieres exactamente? puede ser que finalice por timeout?

Aunque el php diga que no hay limite, ten en cuenta que el servidor Web si tiene otro limite.

Has probado a ejecutarlo desde la consola?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Email Masivo

Publicado por Diego (25 intervenciones) el 18/12/2014 21:55:55
Como estas Xve? Claro, no aclare, je! Lo que quiero decir es que deja de enviar, osea mas o menos a los 10 minutos deja de enviar mensajes.
No probe ejecutarlo desde consola porque nose como se hace.. voy a buscarlo y lo hago...
Hay alguna manera de manejar el timeout para que no se corte?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Email Masivo

Publicado por xve (5685 intervenciones) el 18/12/2014 22:01:32
Los servidores web, no quieres tener ningun hilo abierto... les interesa mucho emitir el resultado y cerrar la conexion para poder atender otras conexiones.

La manera de hacerlo desde consola, es tan sencillo como php -f archivo.php en Linux... entiendo que en Windows tendras que ponerte dentro de la carpeta donde esta instalado el php.exe y ejecutarlo desde ahí.

Al hacerlo desde la consola, ya no existen los timeout!!!!

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Email Masivo

Publicado por Diego (25 intervenciones) el 18/12/2014 22:14:25
Buenisimo! Lo busco y comento! Muchas gracias nuevamente
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar