Ir para conteúdo

POWERED BY:

Arquivado

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

Bateraman

[Resolvido] Enviar emails via Pear com array

Recommended Posts

Olá.

 

Seguinte. Preciso enviar múltiplos e-mails para os usuários do meu site, porém necessito de dados dinâmicos (referentes a cada usuário) em cada e-mail...

 

 

Ou seja, tenho 1000 clientes. Preciso mandar 1.000 e-mails diferentes, um para cada cliente com dados referentes a ele (contidos no meu banco mysql).

 

 

Estou um pouco perdido. Comecei a montar e a editar o código que o meu servidor me forneceu "USANDO O PEAR MAIL".

 

 

Vou colar aqui:

 

 

<?php
// Make a MySQL Connection
$query = "SELECT * FROM clientes"; 
	 
$result = mysql_query($query) or die(mysql_error());


while($array = mysql_fetch_array($result)){
	$id[] = $array[0];
	$email[] = $array[1];
	$nome[] = $array[2];
	
	
}


$emails_separados = implode(",", $email);


?>

Até aqui beleza.

Se eu der um print_r($id); ele vai mostrar todos os ids do meu banco.

Se eu dou um print_r($nome);

 

 

Array ( [0] => Felipe [1] => Fábio )

 

Então isso tá funfando.

 

 

Agora com o código para enviar o e-mail:

<?php

 ##---------------------------------------------------
  ##  Envio de Emails pelo SMTP Autênticado usando PEAR
  ##---------------------------------------------------
  # Mais detalhes sobre o PEAR: 
  #   http://pear.php.net/
  #
  # Mais detalhes sobre o PEAR Mail:
  #   http://pear.php.net/manual/en/package.mail.mail-mime.php
  ##---------------------------------------------------
  
  # Faz o include do PEAR Mail e do Mime.
  include ("Mail.php");
  include ("Mail/mime.php");

  # E-mail de destino. Caso seja mais de um destino, crie um array de e-mails.
  # *OBRIGATÓRIO* 
 
  $recipients = $emails_separados;  //AQUI TÁ PEGANDO O IMPLODE COM VÍRGULAS  email1@email1.com,email2@email2.com   ... 



  # Cabeçalho do e-mail.
  $headers = 
	array (
	  'From'	=> 'de@de.com.br', # O 'From' é *OBRIGATÓRIO*.
	  'To'	  => 'para@para.com.br',
	  'Subject' => 'Assunto do e-mail'
	);

  # Utilize esta opção caso deseje definir o e-mail de resposta
  $headers['Reply-To'] = 'resposta@resposta.com';

  # Utilize esta opção caso deseje definir o e-mail de retorno em caso de erro de envio
  # $headers['Errors-To'] = 'EMailDeRerornoDeERRO@DominioDeretornoDeErro.com';

  # Utilize esta opção caso deseje definir a prioridade do e-mail
  # $headers['X-Priority'] = '3'; # 1 UrgentMessage, 3 Normal  

  # Define o tipo de final de linha.
  $crlf = "\r\n";

  # Corpo da Mensagem e texto e em HTML
 
$html = "Olá {$nome}. Seu código de usuário é {$id} e o seu e-mail é: {$email}";  // ESSA LINHA QUE É O BICHO. ELA QUE PRECISA TER OS DADOS REFERENTES A CADA USUÁRIO DO BANCO DE DADOS

  # Instancia a classe Mail_mime
  $mime = new Mail_mime($crlf);

  # Coloca o HTML no email
  $mime->setHTMLBody($html);


##  # Anexa um arquivo ao email.
##  $mime->addAttachment('/home/suapastahome/www/seuarquivo.txt');

  # Procesa todas as informações.
  $body = $mime->get();
  $headers = $mime->headers($headers);

  # Parâmetros para o SMTP. *OBRIGATÓRIO*
  $params = 
	array (
	  'auth' => true, # Define que o SMTP requer autenticação.
	  'host' => 'smtp.meuserver.com.br', # Servidor SMTP
	  'username' => 'user', # Usuário do SMTP
	  'password' => 'senha' # Senha do seu MailBox.
	);
	
  # Define o método de envio
  $mail_object =& Mail::factory('smtp', $params);

  # Envia o email. Se não ocorrer erro, retorna TRUE caso contrário, retorna um
  # objeto PEAR_Error. Para ler a mensagem de erro, use o método 'getMessage()'.
  $result = $mail_object->send($emails_separados, $headers, $body);
  if (PEAR::IsError($result))
  {
	echo "ERRO ao tentar enviar o email. (" . $result->getMessage(). ")";
  }

 

Como viram acima, o problema é como eu vou fazer pra criar múltiplos e-mails, visto que neste código:

 

 

$recipients = $emails_separados;

 

 

ele tá mandando uma cópia do e-mail para todos os clientes do array. E o corpo do e-mail propriamente dito

 

 

# Corpo da Mensagem e texto e em HTML

 

$html = "Olá {$nome}. Seu código de usuário é {$id} e o seu e-mail é: {$email}"; // ESSA LINHA QUE É O BICHO. ELA QUE PRECISA TER OS DADOS REFERENTES A CADA USUÁRIO DO BANCO DE DADOS.

 

 

Como eu faço isso?

 

Fico no aguardo de qualquer ajuda.

 

Um abraço,

 

FELIPE DELGADO

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não vai conseguir fazer um envio só, pra todos os clientes, alterando dados no corpo do e-mail pra cada cliente.

 

Vai ter que fazer um envio pra cada cliente, separado, em loop (laço/repetição).

 

:)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não vai conseguir fazer um envio só, pra todos os clientes, alterando dados no corpo do e-mail pra cada cliente.

 

Vai ter que fazer um envio pra cada cliente, separado, em loop (laço/repetição).

 

:)

Olá TiuTalk,

 

Primeiramente, desculpas pelo CAPS no título. :)

Em segundo, então, mas eu realmente preciso fazer isso, seja pelo que for. você tem uma dica pra eu começar a montar esse loop em cima dos códigos que eu já tenho? Ou eles são descartáveis?

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seria mais ou menos assim:

# Instancia a classe Mail_mime
  $mime = new Mail_mime($crlf);
  // Coloquei este antes porque não precisa entrar no laço.
$sql = 'SELECT * FROM'; //Aqui você coloca o seu SELECT pra ler do banco
$qry = mysql_query($sql);

while($rs = mysql_fetch_array($qry)){//Aqui você coloca o laço
# Corpo da Mensagem e texto e em HTML

$html = "Olá {$rs['nome']}. Seu código de usuário é {$rs['id']} e o seu e-mail é: {$rs['email']}";  // ESSA LINHA QUE É O BICHO. ELA QUE PRECISA TER OS DADOS REFERENTES A CADA USUÁRIO DO BANCO DE DADOS

  # Coloca o HTML no email
  $mime->setHTMLBody($html);

# Cabeçalho do e-mail.
  $headers = 
	array (
	  'From'	=> 'de@de.com.br', # O 'From' é *OBRIGATÓRIO*.
	  'To'	  => $rs['email'], // TIRA ESTA PARTE LÁ DE CIMA E COLOCA AQUI DENTRO.
	  'Subject' => 'Assunto do e-mail'
	);




##  # Anexa um arquivo ao email.
##  $mime->addAttachment('/home/suapastahome/www/seuarquivo.txt');

  # Procesa todas as informações.
  $body = $mime->get();
  $headers = $mime->headers($headers);

  # Parâmetros para o SMTP. *OBRIGATÓRIO*
  $params = 
	array (
	  'auth' => true, # Define que o SMTP requer autenticação.
	  'host' => 'smtp.meuserver.com.br', # Servidor SMTP
	  'username' => 'user', # Usuário do SMTP
	  'password' => 'senha' # Senha do seu MailBox.
	);
	
  # Define o método de envio
  $mail_object =& Mail::factory('smtp', $params);

  # Envia o email. Se não ocorrer erro, retorna TRUE caso contrário, retorna um
  # objeto PEAR_Error. Para ler a mensagem de erro, use o método 'getMessage()'.
  $result = $mail_object->send($emails_separados, $headers, $body);
  if (PEAR::IsError($result))
  {
	echo "ERRO ao tentar enviar o email. (" . $result->getMessage(). ")";
  }
}

Acho que é mais ou menos isto.

 

Qualquer coisa posta aí de novo

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seria mais ou menos assim:

# Instancia a classe Mail_mime
  $mime = new Mail_mime($crlf);
  // Coloquei este antes porque não precisa entrar no laço.
$sql = 'SELECT * FROM'; //Aqui você coloca o seu SELECT pra ler do banco
$qry = mysql_query($sql);

while($rs = mysql_fetch_array($qry)){//Aqui você coloca o laço
# Corpo da Mensagem e texto e em HTML

$html = "Olá {$rs['nome']}. Seu código de usuário é {$rs['id']} e o seu e-mail é: {$rs['email']}";  // ESSA LINHA QUE É O BICHO. ELA QUE PRECISA TER OS DADOS REFERENTES A CADA USUÁRIO DO BANCO DE DADOS

  # Coloca o HTML no email
  $mime->setHTMLBody($html);

# Cabeçalho do e-mail.
  $headers = 
	array (
	  'From'	=> 'de@de.com.br', # O 'From' é *OBRIGATÓRIO*.
	  'To'	  => $rs['email'], // TIRA ESTA PARTE LÁ DE CIMA E COLOCA AQUI DENTRO.
	  'Subject' => 'Assunto do e-mail'
	);




##  # Anexa um arquivo ao email.
##  $mime->addAttachment('/home/suapastahome/www/seuarquivo.txt');

  # Procesa todas as informações.
  $body = $mime->get();
  $headers = $mime->headers($headers);

  # Parâmetros para o SMTP. *OBRIGATÓRIO*
  $params = 
	array (
	  'auth' => true, # Define que o SMTP requer autenticação.
	  'host' => 'smtp.meuserver.com.br', # Servidor SMTP
	  'username' => 'user', # Usuário do SMTP
	  'password' => 'senha' # Senha do seu MailBox.
	);
	
  # Define o método de envio
  $mail_object =& Mail::factory('smtp', $params);

  # Envia o email. Se não ocorrer erro, retorna TRUE caso contrário, retorna um
  # objeto PEAR_Error. Para ler a mensagem de erro, use o método 'getMessage()'.
  $result = $mail_object->send($emails_separados, $headers, $body);
  if (PEAR::IsError($result))
  {
	echo "ERRO ao tentar enviar o email. (" . $result->getMessage(). ")";
  }
}

Acho que é mais ou menos isto.

 

Qualquer coisa posta aí de novo

 

Carlos Eduardo

 

Opa! E aí Carlos,

 

Valeu pela resposta. Montei aqui e deu o seguinte erro:

 

Fatal error: Class 'Mail_mime' not found in C:\xampp\htdocs\site\envia-mail.php on line 16

 

 

linha 16 - $mime = new Mail_mime($crlf);

 

 

Pergunta:

* Tenho que instalar alguma coisa, tipo esse mime aí? Estou rodando o script offline no meu localhost.

 

 

Abrsss

Compartilhar este post


Link para o post
Compartilhar em outros sites

Precisava colocar o resto do código que tinha... Ali eu postei só o que mudou.

 

Ele pede 2 includes, que tem que estar na mesma estrutura que está lá em cima.

# Faz o include do PEAR Mail e do Mime.

include ("Mail.php");

include ("Mail/mime.php");

Qualquer dúvida posta de novo.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ae Matias

 

Valeu pelas dicas, mas mesmo assim não consegui fazer funfar.

 

Em contrapartida, estudei o código do TiuTalk lá e deu tudo certo! Era isso mesmo rapá! Q mão na roda!!

 

Abraçao ! Muito obrigado mesmo aos dois!

 

 

FALOW

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.