Ir para conteúdo

POWERED BY:

Arquivado

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

Lucas Hellison

[Resolvido] PHPMailer para vários destinatários

Recommended Posts

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

 

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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>"; 
// Este campo abaixo é Opcional
$mail->AltBody = "Corpo da Mensagem somente Texto, sem formatações"; // caso o leitor de e-mails da pessoa não leia no formato HTML


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 !!";
?>

Nesse caso, no e-mail email_2@servidor.com.br aparece que foi enviado também para o email_1@servidor.com.br

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

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.