Jump to content


Photo

Enviar E-Mail A Cada 14 Segundos Com Sleep


  • Faça o login para participar
2 replies to this topic

#1 Ricardo Andrade

Ricardo Andrade

    Novato no fórum

  • Usuários
  • 5 posts
  • Sexo:Não informado

Posted 07/07/2013, 23:31

Boa noite,

Preciso enviar os boletos mensais à todos os clientes da minha empresa, até aí tá ok.
Porém, meu servidor limita o envio de emails pelo PHP à 300 emails/hora.
Para dar uma margem razoável, criei um script que envia 1 email a cada 14 segundo.
Fiz uma base teste de 6000 registros com o meu email repetido as 6000 vezes para poder testar se o envio está ok.
Testando, ele inicia o envio maravilhosamente bem se comportando como previsto, porém em ABSOLUTAMENTE TODOS OS TESTES, uma hora depois do início dos envios, sempre exatamente uma hora depois ele interrompe o envio, do nada.

Configurei para que mesmo que o usuário aborte a conexão ele termine de executar o script, além disso, para que o tempo limite de execução seja infinito, também alterei o tempo de inatividade do MySQL para infinito, MESMO ASSIM o problema persiste.

Segue meus códigos abaixo, gostaria de ajuda...

o php.ini do diretório raiz onde está o script que faz os envios
max_execution_time = 0
max_input_time = 0
safe_mode = off
safe_mode_gid = off
ignore_user_abort = On
mysql.connect_timeout = 0

meu script de envios
$sql = "SELECT * FROM solucao_segundasvias.clientesteste c INNER JOIN solucao_segundasvias.boletos b WHERE c.email <> '' AND c.codcliente = b.codcliente AND b.vencimento LIKE '%$mesano' ORDER BY c.codcond DESC";
$resultado = mysql_query($sql) or die (mysql_error());
$total = mysql_num_rows($resultado);

for($i=0;$i<$total;$i++){

	//lista os resultados da consulta
	$linha = mysql_fetch_array($resultado);
					
	$condominio = $linha["condominio"];
	$cliente = $linha["cliente"];
	$economia = $linha["economia"];
	$codcliente = $linha["codcliente"];
	$vencimento = $linha["vencimento"];
	$emailcli = $linha["email"];
	$boleto = $linha["boleto"];							
	$codbar = $linha["codbar"];

	//Faz o envio do e-mail aqui
	$destinatario = "$emailcli";
	$assunto = "Boleto do $condominio - $economia";
	$mensagem = "<font face='Arial' size='4'><img src='http://www.solucaoadm.com/assinaturanova/topo.jpg'><br /><p style='margin-left: 50px;'>Sr(a). <b>$cliente</b></font>,<font face='Arial' size='2'><br /><br />o seu boleto referente ao pagamento do condomínio da unidade <b>$economia</b> do <b>$condominioacento</b> já foi gerado para o vencimento $vencimento.<br /><br /><b>Segue abaixo o link para visualizar / imprimir:</b><br /><br /><a href='$boleto'>$boleto</a><br /><br /><br />OBS: Este e-mail é de geração automática, por favor, não responda.<br /><br /></p><hr style='border: 1px solid #bbbbbb; color: #bbbbbb; background-color: #bbbbbb; height: 1px;' /></font><p style='margin-left: 50px;'><font face='Arial' size='3'><b>Solução Serviços Para Condomínios Ltda.</b></font><br /><font face='Arial' size='2'>Rua Tronca, 1959 <b>|</b> Exposição <b>|</b> CEP 95010-100 <b>|</b> Caxias do Sul - RS <b>|</b> Fone/Fax: (54) 3222-6377 <b>|</b> <a href='mailto:solucao@solucaoadm.com'>solucao@solucaoadm.com</a> <b>|</b> <a href='http://www.solucaoadm.com'>www.solucaoadm.com</a></font></p>";

	$remetente = utf8_decode("Solução Condomínios <nao-responda@solucaoadm.com>");

	$header = "MIME-Version: 1.0\n"; 
	$header .= "Content-type: text/html; charset=utf-8\n"; 
	$header .= "From: $remetente\n";
	$header .= "Reply-to: $emailcli\n";

	$envia = mail($destinatario, $assunto, $mensagem, $header);

	sleep(14);

}

Fico no aguardo de uma luz, afinal já tentei absolutamente de TUDO!!

Obrigado.

Edição feita por: Ricardo Andrade, 07/07/2013, 23:41.


#2 Ricardo Andrade

Ricardo Andrade

    Novato no fórum

  • Usuários
  • 5 posts
  • Sexo:Não informado

Posted 12/07/2013, 09:27

Após alguns testes descobri que é o PHP quem para de executar, não é perda de conexão MySQL.... só pra constar.

Bom dia à todos...

Então, após muita pequisa e consulta a especialistas concluí o porque do script não executar mais que uma hora, eis o motivo:

Meu servidor utiliza a versão 5.3 do PHP e nessa versão não é possível modificar o set_time_limit e nem o max_execution_time, ele pega as configurações do servidor nestes casos e ponto final.

Infelizmente não há solução ao problema, a única forma seria re-escrever o script com refresh para não dar o tempo limite, porém a janela teria que ficar aberta para execução.

#3 zerof

zerof

    Normal

  • Usuários
  • 76 posts
  • Sexo:Masculino
  • Localidade:São Paulo
  • Interesses:GEOLOCALIZAÇÃO, APACHE, PHP, MYSQL, FOTOGRAFIA, GERENCIAMENTO DE PROJETOS

Posted 14/07/2013, 09:43

Qual sistema POP/SMTP você está usando?
Já pensou na possibilidade de "essa quantidade imensa" de emails estar sendo considerada SPAM, (Sending and Posting Advertisement in Mass)?
Já pensou na possibilidade de gerenciar o sistema de envio através de tarefas "cron"?

Edição feita por: zerof, 14/07/2013, 09:48.

--
zerof
ASSESSORIA & INTERDISCIPLINARIDADE
( ADVICE & INTERDISCIPLINARITY )
http://ed48.com/ - http://educar.pro.br




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq