Ir para conteúdo
Fórum Script Brasil
  • 0

Mostrar Status Do Envio De Mail() Com Flush()


carlosmandra

Pergunta

Pessoal,

tenho um script que recebe uma lista de emails do banco de dados e envia os mesmos. Tenho um problema nele, e queria ver se alguém consegue me ajudar. Quando clico no botão enviar, ele carrega a pagina2.php, que tem esse código abaixo. O problema é que eu queria dar um feedback ao usuário sobre o andamento do envio, ou seja: quando clicar em enviar, a pagina carregasse e começasse a executar o script, mostrando, a cada loop, o status do envio para aquele determinado email. Tentei com flush() seguido de sleep(), mas mesmo com poucos emails, ele só mostra o status quando o script termina o loop.

Alguma idéia?

<?php  
    //Começa o envio
    $x = 1; //varivel para contagem de nmero de e-mails enviados
                $hold = 4; // quantidade de emails que devem ser enviados a cada perodo de 1 minutos
    //começa o loop para os 4 e-mails
    while($linha = mysql_fetch_assoc($rsEmails)) {
    $to = $linha['email'];
    $subject = $row_rsUltima['titulo'];
    $message = $row_rsUltima['conteudo'];
    $headers = "From: ".$row_rsConfigs['nomeNews']."<".$row_rsConfigs['emailNews'].">\n";
    $headers .= "Content-type: text/html; charset=iso-8859-1\n";
    $headers .= "Mime-Version: 1.0";
    
    if(mail($to, $subject, $message, $headers)){
    echo "Enviado com sucesso para $to<br>";
    
    } else {
    echo "Houve um problema no envio para $to<br>";
    
    }
    flush();
                sleep(2);
    $x++; //Soma 1 ao valor do $x
    if($x == $hold) { // Verifica se o $x atingiu o limite de $hold, ou seja, 4 e-mails
    sleep(60); // Se atingiu a condicao acima, o servidor segura o envio por 60 segundos
    $x = 0; // e após isso, zera a contagem de $x. Inicia-se a operação novamente até o final da lista.
    }
}
      ?>

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Se não me falha a memória, quando tive o mesmo problema, descobri que a diretiva output_buffering intefere nisso. O php.ini-recomended traz essa diretiva com o valor 4096 (ou [n]on), mas é recomndável deixá-la com o valor off.

Tente alterar isso no php.ini, reiniciar o Apache e recarregar o script. Veja se o problema é solucionado.

Abraços,

Beraldo

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...