Neste artigo, vou abordar de maneira clara, a utilização da função sleep() do php, de forma que os desenvolvedores que possuem sistemas de envio de mala direta virtual e dependem de limitações de envio do servidor, possam se utilizam de um script dinâmico e ao mesmo tempo, funcional.
É sabido que grande parte dos provedores de hospedagem, limitam a quantidade de envio de emails, geralmente em 300 por hora. Há de se verificar com seu provedor, qual a limitação, mas neste artigo, vamos trabalhar com este padrão.
Função sleep()
O que é: A função sleep atrasa a execução de um código, de acordo com a quantidade de segundos informados no parâmetro seconds da função.
Ex: sleep(20);
Isso significando que a execução do script será atrasada em 20 segundos.
(se você precisa trabalhar com milisegundos, utilize a função usleep() (funciona exatamente igual à função abordada neste artigo).
Vamos ao código.
<?php // Incluimos o arquivo de conexão com o banco require_once('conn2.php'); ?> <?php
// selecionando os emails no banco de dados mysql_select_db($database_conn2, $conn2); $query_RSemails = "SELECT * FROM emails"; $RSemails = mysql_query($query_RSemails, $conn2) or die(mysql_error()); $totalRows_RSemails = mysql_num_rows($RSemails); // assunto e mensagem para ser enviada. // mensagem resgatada de um formulário padrão de envio, // através do método POST $assunto = "Meu envio de emails"; $mensagem = $_POST['mensagem']; // contador de emails que servirá para a função sleep
$cont = 0; // abertura do while de envio dos emails cadastrados
// previamente em um banco de dados mysql
while ($row_RSemails = mysql_fetch_assoc($RSemails)) {
$paraemail = $row_RSemails['email'];
$nome = $row_RSemails['nome']; // função sleep
// assim que a variável $cont, chegar em 300,
// o script irá ser atrasado em 500 segundos
$cont = $cont + 1;
if ($cont == 300) {
flush(); sleep (500);
$cont = 0;
}
mail("$paraemail","$assunto","$mensagem");
} // fecha o while de envio dos emails
?>
Assim sendo:
O contador de envio, ao sinalizar o limite que impomos, atrasa a execução do código, de acordo com o parâmetro de segundos informado. Após o período “dormindo”, o contador será zerado, continuando o while até os próximos 300 registros, onde irá ser atrasado de novo, e assim por diante.