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

enviar e-mails usando função while


Ed_MacGyver

Pergunta

Pessoal,

Tenho um script para envio de newsletters, porém quando o executo ele multiplica os e-mail sendo enviado para cada usuário a mesma quantidade de registros na tabela, ou seja, se a tabela possui 10 registros, são enviadas 10 cópias para cada e-mail :blink:. Já tentei de várias formas diferentes. Agora peço a ajuda de vc's para solucionar esse problema.

Abaixo estou postando o código exatamente como está para verificação do possível erro:

<?php
session_start();
include "conexao.php";

include "mailer.php";

$txt_news        = $_POST["txt_news"];
$txt_assunto    = $_POST["txt_assunto"];

    $mail->Subject = "$txt_assunto";
    $mail->Body = "$txt_news";


$sql = mysql_query("SELECT * FROM news WHERE ativo = 'S'");
$total = mysql_num_rows($sql);
$mailok = 0;
$falha  = 0;
while($lista = mysql_fetch_array($sql)){
    $email = $lista["email"];
    $mail->AddAddress("$email","$email");

 if($mail->Send()){
 $mailok = $mailok + 1;
 $msg = "<font color=green>SUCESSO!</font>";
 }
 else{
 $falha = $falha + 1;
 $msg = "<font color=red>FALHA!</font>";
 }
?> 

 <font face='Arial' size='2'>Enviando para <b><?php echo $email?></b>...
 <b><?php echo $msg?></b></font><br>

<?php } ?>

&lt;script>alert("<?php echo $total?> e-mails deveriam ser enviados...\n<?php echo $mailok?> foram mandados corretamente,\n<?php echo $falha?> falharam!\n")</script>
O arquivo mailer.php possui o complemento do código para envio de e-mails através da classe PHPMailer:
<?php
require_once("PHPMailer_v5.1/class.phpmailer.php");
$mail = new PHPMailer();
$mail->IsSMTP(); 
$mail->Host = "smtp.dominio.com.br";
$mail->SMTPAuth = true;
$mail->Username = "email@email.com.br";
$mail->Password = "senha";
$mail->From = "email@email.com.br";
$mail->FromName = "Meu Nome";
$mail->IsHTML(true);
?>

Ajuda aê pessoal.

Editado por Ed_MacGyver
Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

O que acontece é que para cada email diferente que você quer enviar, é necessário criar uma instância da classe PHPMailer.

Se você tem 10 emails diferentes a serem enviados para 10 pessoas diferentes, terá que criar um objeto para cada email...

Link para o comentário
Compartilhar em outros sites

  • 0
O que acontece é que para cada email diferente que você quer enviar, é necessário criar uma instância da classe PHPMailer.

Se você tem 10 emails diferentes a serem enviados para 10 pessoas diferentes, terá que criar um objeto para cada email...

É o mesmo e-mail para várias pessoas diferentes, um newsletter, mas eu queria que fosse enviado individualmente, o que está acontecendo é que estão sendo enviados uma certa quantidade da mesma cópia da mensagem para cada usúário, e no "para:" estão aparecendo o nome de todos os usuários, quando deveria ser apenas um.

Link para o comentário
Compartilhar em outros sites

  • 0

Ok pessoal, obrigado pela força.

Já consegui resolver, utilizei a dica do MrReisGuilherme (usar a função mysql_fetch_assoc($sql)) e fui limpando o recipiente a cada novo ciclo do loop com a função $mail->ClearAllRecipients();, fiz também uma alteração de lugar com os códigos: include "mailer.php"; $mail->Subject = "$txt_assunto"; e $mail->Body = "$txt_news"; que nesse último caso acho que não influenciou em nada, abaixo estou postando o código após as alterações:

<?php
session_start();
include "conexao.php";

$txt_news        = $_POST["txt_news"];
$txt_assunto    = $_POST["txt_assunto"];

$sql = mysql_query("SELECT * FROM news WHERE ativo = 'S'");
$total = mysql_num_rows($sql);
$mailok = 0;
$falha  = 0;

while($lista = mysql_fetch_assoc($sql)){
    include "mailer.php";
    
    $mail->Subject = "$txt_assunto";
    $mail->Body = "$txt_news";
    
    $email = $lista["email"];
    $mail->AddAddress("$email","$email");

 if($mail->Send()){
 $mailok = $mailok + 1;
 $msg = "<font color=green>SUCESSO!</font>";
 $mail->ClearAllRecipients();
 }
 else{
 $falha = $falha + 1;
 $msg = "<font color=red>FALHA!</font>";
 $mail->ClearAllRecipients();
 }
?> 

 <font face='Arial' size='2'>Enviando para <b><?php echo $email?></b>...
 <b><?php echo $msg?></b></font><br>



<?php } ?>

&lt;script>alert("<?php echo $total?> e-mails deveriam ser enviados...\n<?php echo $mailok?> foram mandados corretamente,\n<?php echo $falha?> falharam!\n")</script>

Agora está funcionando como eu quero :lol:.

Na ultima linha do código, onde tem &lt; substitua por <.

Editado por Ed_MacGyver
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
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...