Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom pessoal, preciso criar uma página que envie e-mail para vários usuarios.
Achei vários artigos em fórums em que se utilizam um foreach no método AddAddress() da classe PHPMailer.
Fiz um teste desta e forma e deu certo. Mas com um problema, aparece o nome de todos os destinatários para quem recebe o e-mail, e isso seria um inconveniente para mim. Queria que a pessoa recebesse o e-mail sem saber que foi enviado para vários usuários do sistema.
Desde já agradeço.
>
Nunca usei o phpMailer, mas você terá que então, enviar cópias ocultas.
eu já tentei usar como cópia oculta antes, com o método AddBCC() do PHPMailer também, mas não deu certo, pois mesmo assim aparece todos os destinatários que foi enviado.
Então. Vejo 2 opções. Ou você envia um e-mail para cada um ou é com o BCC mesmo. Como tentou fazer?
Carlos Eduardo
>
Então. Vejo 2 opções. Ou você envia um e-mail para cada um ou é com o BCC mesmo. Como tentou fazer?
Carlos Eduardo
Certo Carlos, o código é esse:
<?
include("class.phpmailer.php");
$mail = new PHPMailer();
$mail->SetLanguage("br");
$mail->CharSet = "iso-8859-1";
$mail->IsSMTP();
$mail->Host = "smtp.servidor.com.br";
$mail->SMTPAuth = true;
$mail->Username = "usuario@teste.com.br";
$mail->Password = "123456";
$mail->IsHTML(true);
$mail->From = "usuario@teste.com.br";
$mail->FromName = "Teste";
$mail->AddAddress("email_1@servidor.com.br","Nome do Cara 1");
$mail->AddBCC("email_2@servidor.com.br","Nome do Cara 2"); // Envia Cópia Oculta
// Configuração de Assuntos e Corpo do E-mail
$mail->Subject = "tudo de novo";
$mail->Body = "Corpo da Mensagem em formato<br><b>HTML</b>";if(!$mail->Send()){
print "Ocorreu um erro no envio da Mensagem para o destinatario $email.<br />";
print "Erro: ".$mail->ErrorInfo;
exit;
}
print "Seu e-mail foi enviado com Sucesso !!";
?>Mas vai aparecer mesmo, porque o primeiro foi enviado como AddAdress. Para que nenhum dos dois veja para quem foi enviado, adicione os 2 como AddBCC.
Carlos Eduardo
>
Mas vai aparecer mesmo, porque o primeiro foi enviado como AddAdress. Para que nenhum dos dois veja para quem foi enviado, adicione os 2 como AddBCC.
Carlos Eduardo
opaa.. vlw Carlos
desculpa ai pela minha falta de atenção... rsrs
Mas...
eu fiz um teste para enviar para um e-mail para o gmail e outro para o yahoo. No gmail chegou normal, mas no yahoo chegou como SPAM, e usando AddAdress estava chegando normal, sem ser SPAM...
será que neste caso seria melhor criar um loop para enviar um por vez?
Depende da quantidade de pessoas que vão ser enviados.
Carlos Eduardo
>
Depende da quantidade de pessoas que vão ser enviados.
Carlos Eduardo
serão pouco mais de 1500 e-mails, pois vou enviar um e-mail para todos os usuários cadastrados no banco...
Neste caso, acredito que o melhor é criar o loop para enviar, acrescentando um sleep(). Acredito que o seu provedor deva ter algum tipo de limite de envio de e-mails por hora. Eu fiz estes dias um código assim.
$qry = $mysql->query('SELECT id_email, email FROM email WHERE enviado = \'n\'');
while ($row = $qry->fetch_object())
{
$email = trim($row->email);
$mail->ClearAddresses();
$mail->AddAddress($email);
if(!$mail->Send())
{
$mysql->query('INSERT INTO erro_email (`email`,`erro`) VALUES (\''.$email.'\',\''.$mail->ErrorInfo.'\')');
$mysql->query('UPDATE email SET enviado = \'e\' WHERE id_email = '.$row->id_email);
}
else
{
$mysql->query('UPDATE email SET enviado = \'s\' WHERE id_email = '.$row->id_email);
}
$mail->SmtpClose();
sleep(15);
}
Eu adicionava no BD para poder controlar, caso tenha algum tipo de queda durante a execução do script.
Carlos Eduardo
>
Neste caso, acredito que o melhor é criar o loop para enviar, acrescentando um sleep(). Acredito que o seu provedor deva ter algum tipo de limite de envio de e-mails por hora. Eu fiz estes dias um código assim.
$qry = $mysql->query('SELECT id_email, email FROM email WHERE enviado = \'n\'');
while ($row = $qry->fetch_object())
{
$email = trim($row->email);
$mail->ClearAddresses();
$mail->AddAddress($email);
if(!$mail->Send())
{
$mysql->query('INSERT INTO erro_email (`email`,`erro`) VALUES (\''.$email.'\',\''.$mail->ErrorInfo.'\')');
$mysql->query('UPDATE email SET enviado = \'e\' WHERE id_email = '.$row->id_email);
}
else
{
$mysql->query('UPDATE email SET enviado = \'s\' WHERE id_email = '.$row->id_email);
}
$mail->SmtpClose();
sleep(15);
}
Eu adicionava no BD para poder controlar, caso tenha algum tipo de queda durante a execução do script.
Carlos Eduardo
vlw ae, usei sua dica e funciou normal!
xD
Desculpe reabrir um post de tanto tempo, e já marcado com resolvido, mas eu queria fazer quase exatamente isso que foi passado no post mas, nesse caso não há a opção de selecionar os emails a qual vc quer enviar, envia para todos que estão cadastrados no banco de dados.
O que queria era fazer essa seleção usando um checkbox como faria isso?
Adicionar o email no checkbox eu consigo, colocar na variável e depois inserir no código de envio do email que não estou conseguindo.
Nunca usei o phpMailer, mas você terá que então, enviar cópias ocultas.
http://www.google.com.br/search?rlz=1C1GGLS_pt-BRBR343BR343&sourceid=chrome&ie=UTF-8&q=c%C3%B3pia+oculta+phpmailer