Sistema de Newsletter – Final

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

Escrito por Marcelo Ramos on abril 4, 2007. Arquivado em Dreamweaver. Você pode seguir as respostas a esse artigo pelo RSS 2.0. Você pode deixar respostas para esse artigo

6 respostas a Sistema de Newsletter – Final

  1. Se possivel poderia me enviar os arquivos do tutorial ,,

    estou com problemas no responder a msg de confirmação e quando manda o newsletter..

    meu e-mail: rodrigojanovik@yahoo.com.br

  2. Boa tarde Marcelo Souza, gostaria de pedir uma revisão nos códigos e nas explicações, sei q os tutos são feitos com boa vontade, mas neste chega uma parte em q não se entende mais nada e o tutorial se perde. Com certeza seria muito útil se não fosse por ler horas seguidas e tentar diversas vezes para ver que no final não dá em nada, peço um pouco mais de atenção antes de publicar um material que não trará nada nem para o site e nem para o usuário. Obrigado pela atenção e desculpe pelo desabafo.

  3. que usuario e senha coloco aqui
    $smtp->user = “usuario”; /*usuario do servidor SMTP */
    $smtp->pass = “senha”; /* senha dousuario do servidor SMTP*/

    a do email?

  4. Seria possível enviar-me os arquivos do tutorial para que eu possa fazer algumas correções perante aos que fiz?

    ficaria grato.

    meu e-mail: fernando_carvula@hotmail.com

  5. olá, também esotu tendo problemas com os códigos, poderia me enviar os arquivos?

    steniooliv@gmail.com

  6. Anderson dos Santos

    Olá, você poderia enviar os arquivos deste tutorial, nós tivemos problemas em algumas partes. Agradeço desde de já.

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>