Вы находитесь на странице: 1из 7

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

<?php
include ("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
dados.

<?php
include ("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
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 = "newsletter@embu.sp.gov.br";

Ainda dentro da região de loop vamos chamar a classe smtp e mandar enviar a mensagem,
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,
$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 = "newsletter@embu.sp.gov.br";
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:

<?php
include ("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 */
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 = "newsletter@embu.sp.gov.br";
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 = "newsletter@embu.sp.gov.br";
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
clicando aqui

Autor: Marcelo Souza Ramos - Colunista Dreamweaver do Portal MXSTUDIO

Qualquer dúvida envie um email para ramos.marcelosouza@gmail.com ou acesse o nosso


fórum

Вам также может понравиться