9
Sistema de Newsletter - Final Autor: Marcelo Souza Ramos Data de publicação: 04/04/2007 Parte do Tutorial: 1 Quantidade de Visualização: 2614 Coluna Dreamweaver - Sistema de Newsletter - Parte Final Introdução Nessa ultima parte vamos criar os comandos que executarão o envio da newsletter Pré-requisito Conhecimentos básico em PHP e MYSQL Leitura das partes anteriores Conteúdo Abrar a página enviar_newsletter.php A página enviar_newsletter.php vai ser responsável por enviar a newsletter para todos os e-mail cadastrado no banco de dado, ou somente para um determinado e-mail que você deseja. Para isso vamos fazer a inclusão da classe smtp.class.php que vai realizar a conexão e autenticação SMTP para que os e- mails possam ser enviados. Se você estiver no modo de visualização do projeto mude para o modo de visualização do código. Dentro do Bloco de código vamos fazer a inclusão da classe smtp.class.php através do comando include

Sistema de Newsletter - Final

Embed Size (px)

DESCRIPTION

Sistema de Newsletter dreamweaver php mysql

Citation preview

Page 1: Sistema de Newsletter - Final

Sistema de Newsletter - Final Autor:  Marcelo Souza Ramos Data de publicação:  04/04/2007 Parte do Tutorial:  1 Quantidade de Visualização:  2614

Coluna Dreamweaver - Sistema de Newsletter - Parte Final Introdução

Nessa ultima parte vamos criar os comandos que executarão o envio da newsletter

Pré-requisito

Conhecimentos básico em PHP e MYSQL Leitura das partes anteriores

Conteúdo

Abrar a página enviar_newsletter.php

A página enviar_newsletter.php vai ser responsável por enviar a newsletter para todos os e-mail cadastrado no banco de dado, ou somente para um determinado e-mail que você deseja. Para isso vamos fazer a inclusão da classe smtp.class.php que vai realizar a conexão e autenticação SMTP para que os e-mails possam ser enviados.

Se você estiver no modo de visualização do projeto mude para o modo de visualização do código.

Dentro do Bloco de código vamos fazer a inclusão da classe smtp.class.php através do comando include

<?phpinclude ("smtp.class.php");?>

Com a classe já incluída agora vamos configurar a conexão SMTP que necessita de um endereço de servidor (host), usuário (user), senha (pass) e informar que será ativada a autenticação (debug) para que possa enviar os e-mails corretamente. Para fazer a configuração basta apenas declarar o valor das variáveis utilizada na classe com os seus

Page 2: Sistema de Newsletter - Final

dados.

<?phpinclude ("smtp.class.php");

/* Configuração da classe.smtp.php */ $host = "smtp.mail.yahoo.com.br"; /*host do servidor SMTP */ $smtp = new Smtp($host);$smtp->user = "usuario"; /*usuario do servidor SMTP */ $smtp->pass = "senha"; /* senha dousuario do servidor SMTP*/ $smtp->debug =true; /* ativar a autenticação SMTP*/?>

Vamos incluir também através do comando include, a página que vai realizar a conexão com o banco de dados para que possa se consultados os endereços de e-mail cadastrado que vão se enviados.

include("config.php"); /* Página que vai fazer a conexão com obd */

Agora vamos receber as informações que estão sendo enviadas pelo formulário através método POST, ou seja, as informações inseridas no formulário estão anexadas junto ao nome do campo do formulário. Então vamos criar variáveis para armazenar essas informações, começando pela variável para armazenar o destinario ($to) e declarar que seu valor será igual (=) ao campo de nome msg_para ($_POST["msg_para"]) do formulário e o mesmo para o assunto e mensagem.

/* recebendo as informações do formulário */ $to = $_POST["msg_para"];$subject = $_POST["msg_assunto"];$msg = $_POST["mensagem"];

Agora vamos identificar para qual destinario será enviada a mensagem, se será enviado para um destinario especifico ou será enviada para todos os e-mails cadastrados e ativos do banco de dados. Para isso vamos aplicar um teste de verdadeiro ou falso na variável que contém o destinario da mensagem ($to), então se for verdadeiro (if) que o destinario e todos ($to == "todos") então execute comando para enviar mensagem à todos os endereços de e-mails no banco de dados, mais se for falso (else) e porque então o destinario será um único endereço de e-mail especifico.

if($to == "todos"){ /* envia para todos */ }else{ /* envia para um e-mail especifico */ }

Dentro do caso de ter sido verdadeiro que a mensagem será enviado para todos os

Page 3: Sistema de Newsletter - Final

endereços de e-mails, vamos criar uma variável ($sql) com o seu valor sendo um comando para se conectar (mysql_query) e realizar uma consulta no banco de dados e selecionar todas as colunas (SELECT *) da tabela releases (FROM releases) e filtrá-la com todos os e-mail que estão ativos (WHERE ativo='s') para que seja extraído os endereços de e-mail que vão ser enviados, também vamos criar uma variável para saber a quantidade de e-mail nessa consulta ($total) e que devem ser enviados, para isso vamos utilizar o comando para contar os registro (mysql_num_rows) da consulta ($sql), e vamos criar outra variável com o valor de zero para pode contar os e-mail que foram enviados corretamente ($enviados) e outra para contar os e-mail que não foram enviados ($falhado).

$sql = mysql_query("SELECT * FROM newsletter WHERE ativo = 's'");$total = mysql_num_rows($sql); /* quantidade de registros */ $enviados = 0; /* conta os e-mails enviados */ $falhado = 0; /* conta os e-mail que não foram enviado */

Para buscar todos os e-mails no banco de dados e enviar um de cada vez vamos dar inicio a região de loop, utilizando o comando de repetição chamado while. O comando while será associado a uma variável que vamos criar chamada lista ($lista) com o seu valor sendo igual (=) a uma array com todos os e-mail cadastrado e ativo, para criar esse array vamos utilizar a função mysql_fetch_array que vai pegar todos os endereços de e-mail da consulta feita no banco de dados e colocar em uma array para o comando while pegar um e-mail enviar a mensagem, depois pegar outro e-mail e enviar a mensagem e assim consequentemente até que todos os e-mail tenham sido enviados.

/* inicio do loop */ while($lista = mysql_fetch_array($sql)) /*coloca o resultado da consulta do banco de dados numa ARRAY e com o while imprime todo o conteudo da Array.*/{

Agora dentro da região de loop vamos chamar e configurar a classe smtp igual fizemos no inicio e vamos criar a variável que vai contér o destinario, ou seja, o endereço de e-mail de quem vai receber a mensagem, como os e-mails está armazenado na variável lista ($lista), o valor da variável destinario ($to) se declarado como sendo um e-mail que esta na nossa lista ($lista["email"]), esse endereço de e-mail será mudado automaticamente cada vez que for executado um loop, e depois vamos criar a variável remetente ($from) com o seu valor sendo o seu e-mail.

$host = "smtp.mail.yahoo.com.br"; /*host do servidor SMTP */ $smtp = new Smtp($host);$smtp->user = "usuario"; /*usuario do servidor SMTP */ $smtp->pass = "senha"; /* senha dousuario do servidor SMTP*/ $smtp->debug =true; /* ativar a autenticação SMTP*/$to = $lista["email"];$from = "[email protected]";

Ainda dentro da região de loop vamos chamar a classe smtp e mandar enviar a mensagem,

Page 4: Sistema de Newsletter - Final

mais para sabe se a mensagem foi enviada ou não vamos aplicar um teste de verdadeiro ou falso, então se for verdadeiro (if) que a classe smtp enviou o e-mail ($smtp->Send($to, $from, $subject, $msg )) então some mais um na varivável que esta contando as mensagem enviadas ($enviados = $enviados + 1) e vamos criar mais uma variável que vai armazenar uma mensagem ($mensagem) informado que foi enviado corretamente (Enviado Corretamente !), mais se esse teste for falso (else) então vamos somar mais um na variável que está contando os e-mail não enviados ($falhados = $falhados +1) e criar uma variável que vai armazenar uma mensagem ($mensagem) informado que não foi enviada a mensagem (E-mail não enviado).

if($smtp->Send($to, $from, $subject, $msg )) {$enviados = $enviados + 1;$mensagem = "Enviado Corretamente!";}else{$falhados = $falhados +1;$mensagem = "E-mail não enviado";}

Continuando ainda dentro da região de loop vamos criar um relatório parcial do envio de cada mensagem para pode saber se o e-mail foi enviado ou não, então vamos identificar para quem foi enviada a mensagem e através do teste de verdadeiro ou falso que criamos anteriormente vamos sabe a situação do e-mail. Como ainda estamos dentro da região de repetição essa mensagem será mostrada a cada e-mail enviado.

echo "Enviado para $to <br> Status: $mensagem<br>"

Agora vamos fechar a região de repetição e criar uma relatório geral informando o total de e-mails que deveriam se enviados ($total), o total que foi enviado ($enviados) e o total que não foi enviado ($falhado), isso é possível graças as variáveis que criarmos para conta os e-mail

/* fim do loop */ } echo "E-mail que deveriam ser enviados: $total e-mails<br>"; echo "E-mail enviados: $enviados e-mails <br>"; echo "E-mail não enviados: $falhado <br>";

Agora vamos trabalhar no caso do e-mail ter sido um especifico, ou seja, no caso de ter sido falso o teste para o destinario ter sido para todos. Então como o e-mail ja está armazenado na variável ($to) que criamos no inicio e a classe smtp também ja está configurada, vamos apenas criar a variável ($from) remetente e declarar que seu valor vai ser o seu e-mail, e mandar a classe SMTP enviar a mensagem, mais antes de mandar vamos aplicar um teste de verdadeiro ou falso para saber se a mensagem foi enviada, igual fizemos anteriormente

Entao se for verdadeiro (if) que a classe smtp enviou o e-mail ($smtp->Send($to, $from,

Page 5: Sistema de Newsletter - Final

$subject, $msg )) então vamos criar uma variável que vai armazenar uma mensagem ($mensagem) informado que foi enviado corretamente (Enviado Corretamente !), mais se esse teste for falso (else) então vamos criar uma variável que vai armazenar uma mensagem ($mensagem) informado que não foi enviada a mensagem (E-mail não enviado) e vamos criar um relatório do envio da mensagem para pode saber se o e-mail foi enviado ou não, então vamos identificar para quem foi enviada a mensagem e através do teste de verdadeiro ou falso que criamos anteriormente vamos sabe o status do e-mail

else{$from = "[email protected]"; if($smtp->Send($to, $from, $subject, $msg)){$mensagem = "Enviado Corretamente!";}else{$mensagem = "E-mail não enviado";}echo "Enviado para $to <br> Status: $mensagem<br>" }

Código Final:

<?phpinclude ("smtp.class.php");

/* Configuração da classe.smtp.php */ $host = "smtp.mail.yahoo.com.br"; /*host do servidor SMTP */ $smtp = new Smtp($host);$smtp->user = "usuario"; /*usuario do servidor SMTP */ $smtp->pass = "senha"; /* senha dousuario do servidor SMTP*/ $smtp->debug =true; /* ativar a autenticação SMTP*/

include("config.php"); /* Página que vai fazer a conexão com obd */

/* recebendo as informações do formulário */ $to = $_POST["msg_para"];$subject = $_POST["msg_assunto"];$msg = $_POST["mensagem"];

if($to == "todos"){$sql = mysql_query("SELECT * FROM newsletter WHERE ativo = 's'");$total = mysql_num_rows($sql); /* quantidade de registros */ $enviados = 0; /* conta os e-mails enviados */ $falhado = 0; /* conta os e-mail que não foram enviado */

/* inicio do loop */

Page 6: Sistema de Newsletter - Final

while($lista = mysql_fetch_array($sql)) /*coloca o resultado da consulta do banco de dados numa ARRAY e com o while imprime todo o conteudo da Array.*/{ $host = "smtp.mail.yahoo.com.br"; /*host do servidor SMTP */ $smtp = new Smtp($host);$smtp->user = "usuario"; /*usuario do servidor SMTP */ $smtp->pass = "senha"; /* senha dousuario do servidor SMTP*/ $smtp->debug = true; /* ativar a autenticação SMTP*/$to = $lista["email"];$from = "[email protected]"; if($smtp->Send($to, $from, $subject, $msg )) {$enviados = $enviados + 1;$mensagem = "Enviado Corretamente!";}else{$falhados = $falhados +1;$mensagem = "E-mail não enviado";} echo "Enviado para $to <br> Status: $mensagem<br>";} /* fim do loop */ echo "E-mail que deveriam ser enviados: $total e-mails<br>"; echo "E-mail enviados: $enviados e-mails <br>"; echo "E-mail não enviados: $falhado <br>";}else{$from = "[email protected]"; if($smtp->Send($to, $from, $subject, $msg)){$mensagem = "Enviado Corretamente!";}else{$mensagem = "E-mail não enviado";}echo "Enviado para $to <br> Status: $mensagem<br>";}?>

Considerações finais

Chegamos ao final da criação de uma newsletter e, eu recebi vários e-mails com duvidas e problemas que encontraram no decorrer desse tutorial e espero te ajudado a todos, qualquer problema me avise por e-mail que eu respondo a todos dentro do meu tempo disponível, Não esqueça de fazer a leitura dos artigos escritos pelo Marcelo Ariatti e Fábio Ricotta sobre o desenvolvimento do conteúdo de uma newsletter. Qualquer comentário que vocês deixarem será bem vindo. Deixem seus pedidos de tutorias para as próximas colunas

Page 7: Sistema de Newsletter - Final

clicando aqui

Autor: Marcelo Souza Ramos - Colunista Dreamweaver do Portal MXSTUDIO

Qualquer dúvida envie um email para [email protected] ou acesse o nosso fórum