E-mail Em Massa Sem Sobrecarregar Servidor
#1
Posted 06/03/2008, 19:02
Estava pensando em fazer um sistema de envio de e-mails para meus usuários, porém, sei que os servidores tem um limite de envio, e mesmo assim, quando você envia muitos, você pode até mesmo derrubar o servidor.
Pensando em 10, 20, 30 mil usuários, qual seria a melhor alternativa para envio de e-mail em massa? SMTP?
#2
Posted 06/03/2008, 20:17
Acredito que você deva verificar com seu servidor o limite de e-mail's por minuto permitido e ocm isso configurar uma terefa de disparo de envio com um valor baixo por "tacada" e dar um intervalo de 60 segundos entre um disparo e outro.
Como funciona tipo uma paginação, você dispara uns 10 por vez e, ou com sleep() para 60 segundos ou com cronjobs você repete a cada minuto.
É uma idéia
#3
Posted 07/03/2008, 01:29
Um exemplo seria o CARTEIRO XPRESS, somente 75,00 reais o envio de 30 mil. ^^
http://www.carteirox..._faq.jsp#quanto
"Se quiser ser feliz por um dia, vingue-se; se quiser ser feliz por uma vida inteira, perdoe."
Muito Obrigado à todos do fórum, e à toda equipe do fórum!
#4
Posted 07/03/2008, 17:04
onde x = segundos
Se este post lhe ajudou, ajude o fórum também. Use a reputação de mensagens!
#5
Posted 07/03/2008, 20:27
O que eu recomendo.
1) Utilização da classe phpmailer.
2) Utilizar o envio em modo smtp. nao do modo mail() (que usa o mail interno do servidor)
3) Dividir em lotes, de 50 em 50, com intervalo de tempo de 5 segundos ou até mais.
Tive que enviar e-mail para 1000 usuarios, fazendo isso eu nao sobrecarreguei o servidor de email do cliente e o servidor nao caiu na blacklist de servidores spamzeiros
[]'s
#6
Posted 23/06/2008, 15:11
3) Dividir em lotes, de 50 em 50, com intervalo de tempo de 5 segundos ou até mais.
Pois quando faço isso por exemplo para 100 emails cadastrados... enviando 10 emails a cada 10segundos e ele envia todos denovo pois a funcao Send() do phpmailer ela não envia um de cada vez.. ela envia todos juntos.
Fiz com a função sleep. mas não consegui.
Você tem alguma dica?
Abraço
#7
Posted 23/06/2008, 15:24
E não usei a função, mas eu faria se fosse usar somente o MAIL() assim:
Colocar os emails em um array..
$array=array("fulano@email.com","ciclano@email.com","beltrano@email.com");
Contaria quantos emails há no array..
$count=count($array);
Faria um loop para ele usar a função mail para cada um dos emails..
for($i=0;$i<$count;$i++){ $y++; mail($array["$i"],"etc,"etc"); if($y==10){ sleep(10); $y=0; } }
"Se quiser ser feliz por um dia, vingue-se; se quiser ser feliz por uma vida inteira, perdoe."
Muito Obrigado à todos do fórum, e à toda equipe do fórum!
#8
Posted 23/06/2008, 15:41
Então, eu gostaria de implementar o sleep junto com o phpmailer->smtp.. você saberia alguma maneira?
Pois o phpmailer se eu fizer isso de enviar de 10 em 10 ( eu tinha implementado um código semelhante ao seu ) ele envia 10 email para cada =///
Valeu
Abraços
#9
Posted 23/06/2008, 18:39
<? include("./classes/class.phpmailer.php"); $mail = new PHPMailer(); $mail->SetLanguage("br"); $mail->IsHTML(true); // envio como HTML se 'true' $mail->WordWrap = 50; // Definição de quebra de linha $mail->IsSMTP(); // send via SMTP $mail->SMTPAuth = true; // 'true' para autenticação $mail->Mailer = "smtp"; //Usando protocolo SMTP $mail->Host = "smtps.bol.com.br"; //seu servidor SMTP $mail->Username = "***"; //Username da BOL $mail->Password = "***"; // senha de SMTP $mail->From = "***"; $mail->FromName = "Equipe Portal 1533"; $mail->Body = "Email de teste..."; $mail->Subject = "Assunto de teste"; $array = array("dudu1533_php@hotmail.com" => "Dudu1533_PHP", "eduardo.costa@netsite.com.br" => "Eduardo Netsite", "ecosta19@yahoo.com.br" => "Dudu Yahoo", "dudu1533@portal1533.com.br" => "Dudu1533 Portal1533", ); foreach($array as $email => $nome) { $y++; $mail->AddAddress($email, $nome); if($y == 10) { sleep(10); $y = 0; } } $mail->Send(); ?>
Assim pode fazer um array mais complexo, adicionando mais informações.
Veja mais informações sobre o uso da classe em: http://phpmailer.cod...m/examples.html
Até mais
Edição feita por: _Dudu_1533, 23/06/2008, 19:23.
Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Moderador
Twitter: HostCheap
#10
Posted 23/06/2008, 21:57
preciso enviar em média 600 e-mails.
Valeu pela ajuda.
#11
Posted 23/06/2008, 23:24
Mesmo fazendo isso, muitos hosts compartilhados bloqueam o número de envio de email por hora para um número baixo.
Com exemplo de enviar 10 emails a cada 10 segundos, em 16 minutos +-, enviará 1000, muitos hosts o limite é muito menor que esse valor...
E também poderia no exemplo acima, adicionar um flush() para que o script não fique sendo esperado por vários minutos até terminar o envio, dependendo da lista de email, e a cada 10 segundos, além de ter enviado o email, o script dar um "sinal" na tela de que aqueles 10 foram enviados, podendo até mesmo se usar banco de dados, a cada um enviado com sucesso poderia dar um UPDATE na tabela do banco de dados onde tiver esse email (WHERE) dizendo que ele foi enviado, dando maior controle dos envios de emails, quem tem uma lista no banco de dado pode fazer uma consulta e colocar os emails em um formulário do tipo CAIXA DE MULTI SELEÇÃO para selecionar os que deseja enviar, urfff vou parar de falar, por que aí já estaria chegando na criação de ums script de envio de emails.... '-'
Edição feita por: lwirkk, 23/06/2008, 23:26.
"Se quiser ser feliz por um dia, vingue-se; se quiser ser feliz por uma vida inteira, perdoe."
Muito Obrigado à todos do fórum, e à toda equipe do fórum!
#12
Posted 28/06/2008, 14:59
Abraços.
#13
Posted 28/06/2008, 15:18
Sem problemas!lwirkk, consegui monta um sistema legal com a dica do flush() com sleep para ir informando ao cliente. Valeu pela ajuda de vocês
Abraços.
Muito útil nesses casos e em muitos outros a função flush()
"Se quiser ser feliz por um dia, vingue-se; se quiser ser feliz por uma vida inteira, perdoe."
Muito Obrigado à todos do fórum, e à toda equipe do fórum!
#14
Posted 12/08/2008, 08:32
#15
Posted 12/08/2008, 08:55
faça seu próprio script cara, é mais em conta e você aprende muito mais!
Se este post lhe ajudou, ajude o fórum também. Use a reputação de mensagens!
0 user(s) are reading this topic
0 membro(s), 0 visitante(s) e 0 membros anônimo(s)