Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

AAninh@

[Resolvido] Enviar 350 emails por hora

Recommended Posts

Meu provedor só autoriza o envio de apenas 350 e-mails por hora, que código tenho de usar?

 

Estou usando o sequinte script:

 

<? 
mysql_select_db($database_polis_bdcon, $polis_bdcon);
$select = "SELECT * FROM mail"; 
$query = mysql_query($select); 
$total = mysql_num_rows($query); 
for($i=0;$i<$total;$i++){         
        $dados = mysql_fetch_array($query);
        global $nome;
        $nome = $dados["nome"];
        $email = $dados["email"];
        $titulo = $_POST["titulo"];
        $mensagem1 = wordwrap(nl2br($_POST["mensagem"]),68,"\n",true);
        $mensagem = " 
        <style type=\"text/css\"><!-- .style1 {font-family: Verdana, Arial, Helvetica, sans-serif;
             font-size: 12px; } --> </style> 
        <table width=\"800\" cellpadding=\"0\" cellspacing=\"0\">
               <tr>
        <td><img src=\"http://www.eu.com.br/img/new_top.jpg\" width=\"800\" height=\"252\" /></td>
  </tr>
  <tr>
        <td background=\"http://www.ru.com.br/img/new_meio.jpg\"><table width=\"800\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\">
          <tr>
                <td width=\"92\"> </td>
                <td width=\"604\"><span class=\"style1\"> Ao Sr.(a) $nome <br /> <br /> $mensagem1 </span></td>                 <td width=\"102\"> </td>
          </tr>
        </table></td>
  </tr>
  <tr>
        <td><img src=\"http://www.eu.com.br/img/new_base.jpg\" width=\"800\" height=\"173\" /></td>   </tr> </table>";
          //DEFINE O CABEÇALHO E INFORMAÇÕES DE FORMATO
        $headers  = "MIME-Version: 1.0\r\n";
        $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
        //CRIA O CABEÇALHO PRINCIPAL
        $headers .= "From: Nós <eu@eu.com.br>\r\n";
        //ENVIA O EMAIL PARA O ENDEREÇO EM QUESTAO NO MOMENTO
        mail($email,$titulo,$mensagem,$headers);
         } ?>
<p>Newletter enviado com sucesso! </p> <p><a href="adm.php">Voltar</a></p>

 

Obrigada

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma alternativa mais rápida para resolver este problema, pode ser limitar os registros através do SQL. Algo do tipo:

$select = "SELECT * FROM mail WHERE id >=1 and id<=350";

 

Se a quantidade de emails a ser enviada, for muito grande, claro que é melhor desenvolver algum script para fazer isto.

O campo ID foi uma alusão ao campo chave de sua tabela.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso vai fazer com que só mande 350/hora?

 

Tenho um banco de dados com 2 mil e-mails, e que tende a aumentar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não vai fazer mandar somente 350/hora. Para fazer isto, você vai ter que usar sleep() e/ou cronjob (Linux) Agendador de Tarefas (Windows), além de set_time_limit.

http://br.php.net/sleep

http://br.php.net/manual/pt_BR/function.set-time-limit.php

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seria mais ou menos assim:

 

mysql_select_db($database_polis_bdcon, $polis_bdcon);
$select = "SELECT * FROM mail";
$query = mysql_query($select);
$total = mysql_num_rows($query);

set_time_limit(0);

$emails_por_hora = 250;
$enviados = 0;

for($i=0;$i<$total;$i++){
        if ($enviados == $emails_por_hora)
        {
                $enviados = 0;
                sleep(3600);
        }
        $enviados++;
        $dados = mysql_fetch_array($query);
        global $nome;
        $nome = $dados["nome"];
        $email = $dados["email"];

$titulo = $_POST["titulo"];
$mensagem1 = wordwrap(nl2br($_POST["mensagem"]),68,"\n",true);
$mensagem = "
<style type=\"text/css\">
<!--
.style1 {
        font-family: Verdana, Arial, Helvetica, sans-serif;
        font-size: 12px;
}
-->
</style>
<table width=\"800\" cellpadding=\"0\" cellspacing=\"0\">
  <tr>
        <td><img src=\"http://www.eu.com.br/img/new_top.jpg\" width=\"800\" height=\"252\" /></td>
  </tr>
  <tr>
        <td background=\"http://www.eu.com.br/img/new_meio.jpg\"><table width=\"800\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\">
          <tr>
                <td width=\"92\"> </td>
                <td width=\"604\"><span class=\"style1\"> Ao Sr.(a) $nome <br /> <br /> $mensagem1 </span></td>
                <td width=\"102\"> </td>
          </tr>
        </table></td>
  </tr>
  <tr>
        <td><img src=\"http://www.eu.com.br/img/new_base.jpg\" width=\"800\" height=\"173\" /></td>
  </tr>
</table>";


        //DEFINE O CABEÇALHO E INFORMAÇÕES DE FORMATO
        $headers  = "MIME-Version: 1.0\r\n";
        $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
        //CRIA O CABEÇALHO PRINCIPAL
        $headers .= "From: Eu<eu@eu.com.br>\r\n";       
        //ENVIA O EMAIL PARA O ENDEREÇO EM QUESTAO NO MOMENTO
        mail($email,$titulo,$mensagem,$headers);
        $enviados++;
}

Obrigada

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quase isto. Você está somando $enviados++ duas vezes no mesmo script e a lógica tá meio estranha...

 

Tenta assim.

mysql_select_db($database_polis_bdcon, $polis_bdcon);
$select = "SELECT * FROM mail";
$query = mysql_query($select);

set_time_limit(0);

$emails_por_hora = 250;
$enviados = 0;

while ($dados = mysql_fetch_array($query))
{
       if ($enviados == $emails_por_hora)
       {
               $enviados = 0;
               sleep(3600);
       }
       global $nome;
       $nome = $dados["nome"];
       $email = $dados["email"];


 

E daí você deixa o $enviados++ no final do código.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

O ideal é aproveitar a hora toda e não disparar um "monte" de uma vez e esperar 1h...

 

Se pode enviar 350 por hora você pode enviar 5.8 por minuto... Seria bom então enviar um e-mail e pausar 12s... Isso vai enviar 5 e-mails por minuto e vai manter o limite de 350 por hora. :)

 

Se você fizer isso de acumular vários e-mails de uma vez e depois parar o script por 1h seu servidor pode rejeitar as mensagens pois elas foram acumuladas muito rápido... Você está trabalhando com um WebHost não com um servidor dedicado optimizado para disparo de e-mail*...

 

 

* Conheço um que entregam de 3 a 5 mil e-mails por minuto.. :S

Compartilhar este post


Link para o post
Compartilhar em outros sites

O ideal é aproveitar a hora toda e não disparar um "monte" de uma vez e esperar 1h...

 

Se pode enviar 350 por hora você pode enviar 5.8 por minuto... Seria bom então enviar um e-mail e pausar 12s... Isso vai enviar 5 e-mails por minuto e vai manter o limite de 350 por hora. :)

 

Se você fizer isso de acumular vários e-mails de uma vez e depois parar o script por 1h seu servidor pode rejeitar as mensagens pois elas foram acumuladas muito rápido... Você está trabalhando com um WebHost não com um servidor dedicado optimizado para disparo de e-mail*...

 

 

* Conheço um que entregam de 3 a 5 mil e-mails por minuto.. :S

 

 

Olá Amigo, pode me passar mais informações sobre esse disparo para 3 ou 5 mil por minuto ?

 

Abraços.

 

Se puder, apololira@gmail.com.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então como faço para enviar 5.8 por minuto? enviar um e-mail e pausar 12s?

 

Meu código está assim:

 

mysql_select_db($database); $select = "SELECT * FROM mail"; $query = mysql_query($select);  set_time_limit(0);  $emails_por_hora = 250; $enviados = 0;  while ($dados = mysql_fetch_array($query)) {         if ($enviados == $emails_por_hora)         {                 $enviados = 0;                 sleep(3600);         }         global $nome;         $nome = $dados["nome"];         $email = $dados["email"];  $titulo = $_POST["titulo"]; $mensagem1 = wordwrap(nl2br($_POST["mensagem"]),68,"\n",true); $mensagem = " <style type=\"text/css\"> <!-- .style1 {         font-family: Verdana, Arial, Helvetica, sans-serif;         font-size: 12px; } --> </style> <table width=\"800\" cellpadding=\"0\" cellspacing=\"0\">   <tr>         <td><img src=\"http://www.eu.com.br/img/new_top.jpg\" width=\"800\" height=\"252\" /></td>   </tr>   <tr>         <td background=\"http://www.eu.com.br/img/new_meio.jpg\"><table width=\"800\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\">           <tr>                 <td width=\"92\"> </td>                 <td width=\"604\"><span class=\"style1\"> Ao Sr.(a) $nome <br /> <br /> $mensagem1 </span></td>                 <td width=\"102\"> </td>           </tr>         </table></td>   </tr>   <tr>         <td><img src=\"http://www.eu.com.br/img/new_base.jpg\" width=\"800\" height=\"173\" /></td>   </tr> </table>";           //DEFINE O CABEÇALHO E INFORMAÇÕES DE FORMATO         $headers  = "MIME-Version: 1.0\r\n";         $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";         //CRIA O CABEÇALHO PRINCIPAL         $headers .= "From: Eu<eu@eu.com.br>\r\n";                //ENVIA O EMAIL PARA O ENDEREÇO EM QUESTAO NO MOMENTO         mail($email,$titulo,$mensagem,$headers);         $enviados++; }

 

Obrigada...

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então meu código ficara assim:

 

mysql_select_db($database);
$select = "SELECT * FROM mail";
$query = mysql_query($select);

set_time_limit(0);

$emails_por_hora = 300;
$enviados = 0;

while ($dados = mysql_fetch_array($query))
{
       if ($enviados == $emails_por_hora)
       {
               $enviados = 0;
               sleep(12);
       }
       global $nome;
       $nome = $dados["nome"];
       $email = $dados["email"];

$titulo = $_POST["titulo"];
$mensagem1 = wordwrap(nl2br($_POST["mensagem"]),68,"\n",true);
$mensagem = "
<style type=\"text/css\">
<!--
.style1 {
       font-family: Verdana, Arial, Helvetica, sans-serif;
       font-size: 12px;
}
-->
</style>
<table width=\"800\" cellpadding=\"0\" cellspacing=\"0\">
 <tr>
       <td><img src=\"http://www.eu.com.br/img/new_top.jpg\" width=\"800\" height=\"252\" /></td>
 </tr>
 <tr>
       <td background=\"http://www.eu.com.br/img/new_meio.jpg\"><table width=\"800\" align=\"center\" cellpadding=\"0\" 

cellspacing=\"0\">
         <tr>
               <td width=\"92\"> </td>
               <td width=\"604\"><span class=\"style1\"> Ao Sr.(a) $nome <br /> <br /> $mensagem1 </span></td>
               <td width=\"102\"> </td>
         </tr>
       </table></td>
 </tr>
 <tr>
       <td><img src=\"http://www.eu.com.br/img/new_base.jpg\" width=\"800\" height=\"173\" /></td>
 </tr>
</table>";


       //DEFINE O CABEÇALHO E INFORMAÇÕES DE FORMATO
       $headers  = "MIME-Version: 1.0\r\n";
       $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
       //CRIA O CABEÇALHO PRINCIPAL
       $headers .= "From: Eu<eu@eu.com.br>\r\n";       
       //ENVIA O EMAIL PARA O ENDEREÇO EM QUESTAO NO MOMENTO
       mail($email,$titulo,$mensagem,$headers);
       $enviados++;
}

 

Obrigada

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigada

 

Estou testando com o sequinte código, assim que tiver uma resposta se deu certo ou não, posto aqui para agradecer ou para novamente tentarmos resolver o problema.

 

mysql_select_db(...);
$select = "SELECT * FROM mail";
$query = mysql_query($select);

set_time_limit(0);

$emails_por_hora = 250;
$enviados = 0;

while ($dados = mysql_fetch_array($query))
{
        if ($enviados == $emails_por_hora)
        {
                $enviados = 0;
                sleep(3600);
        }
        global $nome;
        $nome = $dados["nome"];
        $email = $dados["email"];

$titulo = $_POST["titulo"];
$mensagem1 = wordwrap(nl2br($_POST["mensagem"]),68,"\n",true);
$mensagem = "
<style type=\"text/css\">
<!--
.style1 {
        font-family: Verdana, Arial, Helvetica, sans-serif;
        font-size: 12px;
}
-->
</style>
<table width=\"800\" cellpadding=\"0\" cellspacing=\"0\">
  <tr>
        <td><img src=\"http://www.eu.com.br/img/new_top.jpg\" width=\"800\" height=\"252\" /></td>
  </tr>
  <tr>
        <td background=\"http://www.eu.com.br/img/new_meio.jpg\"><table width=\"800\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\">
          <tr>
                <td width=\"92\"> </td>
                <td width=\"604\"><span class=\"style1\"> Ao Sr.(a) $nome <br /> <br /> $mensagem1 </span></td>
                <td width=\"102\"> </td>
          </tr>
        </table></td>
  </tr>
  <tr>
        <td><img src=\"http://www.eu.com.br/img/new_base.jpg\" width=\"800\" height=\"173\" /></td>
  </tr>
</table>";


        //DEFINE O CABEÇALHO E INFORMAÇÕES DE FORMATO
        $headers  = "MIME-Version: 1.0\r\n";
        $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
        //CRIA O CABEÇALHO PRINCIPAL
        $headers .= "From: Eu<eu@eu.com.br>\r\n";       
        //ENVIA O EMAIL PARA O ENDEREÇO EM QUESTAO NO MOMENTO
        mail($email,$titulo,$mensagem,$headers);
        $enviados++;
}

Muito Obrigada

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom galera, so pra contribuir, o PHPList trabalha bem com isso, você pode configurar qtos e-mail por hora, assim como tbm a forma como o tiu talk disse...

 

É um excelente sistema de newsletters...

Ta aí a dica

 

abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

está dando erro na linha 10:

 

Parse error: syntax error, unexpected T_VARIABLE in /home/phfmiran/public_html/poladmin/envio_email.php on line 10.

 

$emails_por_hora = 300;

O que tem de errado com ela?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.