Bateraman 0 Denunciar post Postado Maio 4, 2009 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
~TiuTalk~ 7 Denunciar post Postado Maio 4, 2009 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
Bateraman 0 Denunciar post Postado Maio 4, 2009 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
Matias Rezende 50 Denunciar post Postado Maio 4, 2009 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
~TiuTalk~ 7 Denunciar post Postado Maio 4, 2009 Talvez este exemplo te ajude: http://phpmailer.codeworxtech.com/index.php?pg=exampledb A lógica é a mesma. Compartilhar este post Link para o post Compartilhar em outros sites
Bateraman 0 Denunciar post Postado Maio 4, 2009 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
Matias Rezende 50 Denunciar post Postado Maio 5, 2009 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
Bateraman 0 Denunciar post Postado Maio 5, 2009 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