Script: Envio de Newsletter percorrendo banco de dados | André Buzzo
contato@andrebuzzo.com.br | (11) 9-8551-3500 | facebook | skype:andrebuzzowebdesign

Script: Envio de Newsletter percorrendo banco de dados

Publicado na categoria Banco de Scripts com 11.285 visualizações e 83 comentários

Banco de Scripts - Envio de Newsletter percorrendo banco de dados - André Buzzo Webdesign

envio.php

    

<?php
header ('Content-Type: text/html; charset=utf-8');

include ("class.phpmailer.php");
include ("conexao.php");

//Campos para envio da mensagem

$de = utf8_decode('quem está enviando essa mensagem');
$para = utf8_decode('destinatário');
$assunto = utf8_decode('Assunto do E-mail');
$html = utf8_decode('Insira aqui o seu conteúdo HTML');

$tabela = "nome-da-tabela";

// CAMPOS UTILIZADOS PARA A CONSULTA
$campos = "id, nome, email, codStatus";

// NUMERO MÁXIMO DE ENVIO
$quant = 2;

// TEMPO ENTRE UM PROCESSO DE ENVIO E OUTRO
$seg = 15;

// CONECTA COM O SERVIDOR MYSQL
mysql_connect($host,$usuario,$senha);

// SELECIONA O BANCO
mysql_select_db($banco);

// RESGATA O VALOR DA GLOBAL INICIO
$inicio = $_GET["inicio"];

// ATRIBUI O RESULTADO DA SOMA ENTRE INICIO E QUANT
$fim = $inicio + $quant;

// VERIFICA SE FOI ATRIBUIDO VALOR A VARIAVEL "INICIO"
if($inicio == ""){

// ATRIBUI O VALOR 0 CASO NÃO EXISTA VALOR ATRIBUIDO
$inicio = 0;
}else{

// ATRIBUI O VALOR DA GLOBAL INICIO CASO JA EXISTA VALOR ATRIBUIDO
$inicio = $_GET["inicio"];
}

// EXECUTA A CONSULTA OU INFORMA UM ERRO CASO OCORRA
$sql = mysql_query("SELECT ". $campos ." FROM ". $tabela ." WHERE codStatus = 0 LIMIT ". $inicio .",". $quant)or die(mysql_error());

// VERIFICA SE AINDA EXISTEM EMAILS A SEREM ENVIADOS
if(mysql_num_rows($sql) == 0){

// ALTERANDO O VALOR DO CAMPO CODSTATUS PARA 0
@mysql_query("UPDATE ". $tabela ." SET codStatus = 0");

// INFORMO O TÉRMINO DO PROCESSO
echo "Fim do processo de envio!";
}else{

// CONTINUA EFETUANDO O ENVIO
echo "<meta http-equiv="refresh" content="" . $seg . ",URL=?inicio=". $fim ."">";
}

// CRIA O LAÇO REPETITIVO
while($r = mysql_fetch_array($sql)){

// ADICIONAMOS OS PADRÕES DE DESTINATRIO
$para = $r["email"];

//Criando a classe PHPMailer para envio de newsletter

$mail = new PHPMailer();

$mail->IsSMTP = ('smtp');
$mail->Mailer = ('mail');
$mail->SMTPSecure = 'ssl';
$mail->SMTPAuth = true;
$mail->Username = ('usuario-de-email');
$mail->Password = ('senha-do-email');
$mail->Sender = ('usuario-de-email');
$mail->From = ('email-de-quem-esta-enviando');
$mail->FromName = $de;
$mail->Addbcc ($para);
$mail->AddReplyTo = ('para-quem-responder-o-email');
$mail->Wordwrap = 50;
$mail->Subject = ($assunto);
$mail->IsHTML = (true);

$texto = 'Texto alternativo, caso não seja exibido o HTML por algum problema';

$mail->Body = $html;
$mail->AltBody = $texto;

if($mail->Send()){
echo "<hr />Mensagem enviada para: ". $para ."<br />";

//Altero o código para 1 para parar o envio do loop

@mysql_query("UPDATE". $tabela ."SET codStatus = 1 WHERE id = 1".$id);

} else {
echo "Mensagem não enviada para: ". $para ."<br />";
}
}

?>

conexao.php


<?php

$host = ('localhost');
$usuario = ('nome-de-usuario');
$senha = ('sua-senha');
$banco = ('nome-do-banco-de-dados') or die ('Erro na seleção da tabela');

?>

Classe PHPMailer

Clique aqui para fazer o donwload da classe!

Voltar à página anterior!

  • Josimar Costa De Lima Junior

    Muito bom esse script…

  • Olá Marcelo!

    Cara, você precisa ver então com a sua hospedagem o que acontece com seu IP. Pode ser baixa reputação ok?

    Abraços!

  • Eduardo Correia

    André. o navegador seria apenas a interface do usuário, não o script em si, não é? Bom , de qualquer forma, eu havia rodado em todos os browsers e nada, porém em uma revisão mais apurada vi que o nome de uma das tabelas que eu estava inserindo estava errado. Corrigi isto e funcionou, obrigado!

    • Fala Eduardo!

      Não meu velho … não sei se apenas pegou o código no Banco de Scripts ou assistiu as vídeo aulas … mas nas aulas eu deixo claro que dependendo do navegador, a atualização não rola a contento.

      Mas se conseguiu detectar o problema, fico feliz em saber que conseguistes resolver os pepinos!

      Abraços cara!

  • Eduardo Correia

    Gemte boa, valeu pelo material, porém aqui pra mim o script não atualiza o status no banco e fica portanto num loop infinito nos 10 primeiros (ou quantos eu parametrizar) e-mails.
    Ele envia, mas nunca vai ter fim ou vai enviar a todos os do banco.

    Valeu e obrigado se puder responder!

    • Fala Eduardo!

      Cara, qual navegador você está utilizando para efetuar os envios?

      Abraços!

  • Pingback: Newsletter e Mala Direta | HRJ()

  • Pingback: Mala Direta | HRJ()

  • Pingback: Mala Direta | 8Dim()

  • Ivan Pinheiro

    Então André eu to fazendo o teste do script em localhost, o navegador é o chrome.

    • Ivan, não quero soar de maneira grosseira contigo, mas creio que você não assistiu a vídeo aula completamente.

      Nela, eu deixo claro que isso não é possível de ser realizado via Localhost e que o navegador que deve ser utilizado é o Firefox.

      Por favor, assista as 3 partes da vídeo aula que conseguirá enviar o que precisa, utilizando uma hospedagem.

      Forte abraço e até mais.

  • Ivan Pinheiro

    Não mexi no código André

    • Fala Ivan!

      Onde está hospedado o seu site? Você está usando o navegador Firefox para efetuar os disparos?

      Abraços!

  • Ivan Pinheiro

    Olá André estou com problemas no código não para de enviar emails nunca entra na condição codStatus=1;
    Podes dar uma força?

    • Olá Ivan!

      Cara …você está com problemas no LOOP então… você alterou algo no código? Compare ele com o que eu disponibilizei no banco de scripts …

      Abraços!

  • Acabei de me informar e meu servidor não permite que eu utilize o PHPmailer. :(

    • Putz Rodrigo!

      Essa semana eu conversei com um compadre que também estava com problemas, mas o dele era pior. Nem a função “mailer” o servidor deixava usar. Era um gratuito.

      Se quiser, existe o HostGator, o qual eu uso e sempre recomendo. Tem uns planos legais lá, mas fique atento à política de envio de e-mails. Eles são bem rígidos e exigem que haja uma “dupla confirmação” do cadastro do endereço de e-mail.

      Seria algo do tipo: você disponibiliza o campo para cadastro -> O usuário cadastra e você, antes de inserir o endereço no seu banco, envia um e-mail para ele para ‘confirmar’ o cadastro -> O usuário confirma o cadastro e aí sim, você dispara a mala direta.

      Forte abraço e até mais!

  • Fala André Buzzo, primeiramente gostaria de parabenizar seu trabalho, estou tendo uma dificuldade aqui, com esse envio de newsletter, consegui faze o cadastro dos clientes, ja esta funcionando o script mais o envio não está indo . o que poderia ser ???

    • Fala Rodrigo!

      Então meu amigo … aí depende de vários fatores … navegador que está utilizando, hospedagem … não posso afirmar e nem dar ao menos um palpite “certeiro” nesse assunto …

      Abraços!

  • o André , tem como eu implementar nesse esquema do envio de emails em lote
    para colocar uma enviar a mensagem individualmente, ao invez de pegar todos os emails
    mandar um email só selecionado?

    • Fala Johnatan!

      Cara…até dá! Mas o sistema teria que ter uma outra abordagem.

      Abraços!

  • felipe

    Grande André
    show de bola a video aula . me ajudou muito
    rapaz eu estou com um duvida monstra assim , eu montei um layout e fatiei
    gostaria de inserir a imagem como background, é possivel?
    eu inseri mas não me chega a imagem de fundo.
    usar divs css inline não é recomendado.

    • Fala Felipe!

      Cara..eu uso o CSS no head do HTML. Creio eu que possa utilizar as imagens no background, bastando para isso, declarar o caminho ABSOLUTO da imagem, e não o relativo…

      Abraços!

  • Jonas

    André
    Uma duvida, Como eu faço para pegar o nome na tabela onde esta o email e enviar no email de cada um ex: email joao@hotmail.com nome joão ai no corpo do email mostrar ola João
    no outro email maria@gmail.com ai no corpo do email mostrar olá maria
    Eu estou tentando fazer isso , mas só me mostra o ultimo registro da tabela.
    obrigado

    • Fala Jonas!

      Nesse seu caso, vc precisaria inserir alguma variável que chame o nome do cidadão e fazer com ele seja impresso dentro do “while” do script. Aí, ENQUANTO houver registros no banco, o nome será impresso sempre…

      Abraços!

  • Onde você colocou
    echo “Mensagem enviada para: “. $para .””;
    Eu queria colocar um progressbar jqueryui para fazer esse acompanhamento , sabe me dizer como fazer?

    • Fala Marcelo!

      Cara…fuça num site chamado DynamicDrive.. lá tem uma biblioteca imensa de código javaScript que podem te ajudar!

      Abraços!

  • se eu quizer no lugar dele exibir os emails enviados em loop , colocar uma progressbar e no fim printar concluido tem como?

  • O André ve se podes me ajudar
    usando esse sistema de envio eu criei um tipo de newsletter que recebe dados do bd via php
    só que quando envio a mensagem o e-mail não interpreta o php então gerei um jpg da pagina
    ele envia o jpg mas eu queria fazer isso dinamicamente com Session ou algo assim para pegar o valor da jpg gerada e enviar para o email de maneira que ele leia a mensagem . já que email não interpretam codigos

    • Fala Marcelo!

      Cara… não entendi sua pergunta… o script faz o envio corretamente…só use o Firefox para fazer isso…

      Abraços!

  • Uma solução para o meta refresh no IE que não funfa é
    é
    header(“refresh:”.$seg.”;URL=?inicio=”.$fim.””);

    • Legal Marcelo!

      Obrigado pela contribuição meu velho!

      Abraços!

  • Matheus

    André, ótima aula, muito bem explicado, parabéns!
    Mas tenho um problema, quando abro a página envio.php, não recebo nenhum nenhuma mensagem em nenhum dos endereço de email cadastrados do banco de dados… Tem como você me ajudar?
    Abraços!

  • marcelo

    veio , show de bolo o tutorial
    Me ajudou pacas
    no meu caso em um email da lista a mensagem não chega nas demais chegaram
    e apenas no hotmail ele foi para caixa de spam
    como fazer a mensagem não ir para a caixa de spam?

    • Fala Marcelo!

      Cara…o hotmail é um caso a parte. Se o e-mail não estiver “aprovado” pelo usuário, ele vai para a pasta de lixo eletrônico mesmo. Aí não tem o que fazer.

      Abraços e obrigado pelas palavras!

  • João Paulo

    Boa tarde galera, valeu pelo tutorial André, muito bem explicado, mateiral de ótima qualidade que assim como os colegas acima me ajudou muito.

    Forte abraço.

    João Paulo.

  • Wander de matos

    Muito boa video aula, ta de parabens Andre.
    So queria perguntar uma coisa, o campo codStatus e de que tipo, varchar?
    Valew brother!!

    • Fala Wander!

      Obrigado pelo comentário! Em relação ao seu questionamento, sim. O campo é varchar!

      Forte abraço meu velho!

  • ednea

    Olá pessoal!
    Estou precisando de um script css para cadastro de meus clientes receberem newsletter.
    O que tem aqui é em PHP e não funcionou em meu site (desculpe se eu falar bobagem, não flagro nada de desenvolvimento rsrs). Só preciso de um script em css, alguém tem para me enviar?
    Att,
    Ednea

    • Ednea, o que você precisa na realidade? Não entendi o que necessita.

      Abraços!

  • Goimy

    Boa noite André, quando ao update do codStatus, o que é o id no final ja que tem um 1 atraz…
    @mysql_query(“UPDATE”. $tabela .”SET codStatus = 1 WHERE id = 1″.$id);

    • Goimy, boa tarde!

      Cara … não entendi sua pergunta!

      Abraços!

  • kukka

    cara eu tou sem expicação pra o acontecimento desse negócio….
    simplismente coloquei a textearea e lá no envia.php eu coloquei a variavél pra recerber o conteudo da textearea
    tá aqui nesse link o codigo que recebe o conteudo do form
    http://kukkaweb.com/home/imagem2.JPG

    dá uma olhada no link a seguir,
    http://kukkaweb.com/home/imagem.JPG
    esse foi o newsletter que me foi enviado

    • Véio… seguinte…você precisa declarar o caminho absoluto das suas imagens para que as mesmas sejam exibidas corretamente.

      E necessariamente, precisam ser salvas em alguma pasta.

      Se foi exatamente isso que eu entendi…

      Abraços!

  • kukka

    andrézão meu velho… voltando a te abusar cara
    eu parei por um bom tempo no desenvolvimento web…
    e agora tou com um pró hj eu estava revendo o sistema de newsletter que vc passou dai colokquei um campo com uma textearea para inserir o conteudo dinamicamente, só que ele envia o conteudo pro email sendo que quando chega lá no email o código tá com contrabarras
    tipo: (
    pode me ajudar com isso ?

    • Holoco véio!

      Me “abusar” pegou mau hein? kkkkkkkkkkkkkkkkk

      Cara…você está tratando o conteúdo que está sendo passado pela textarea?

      Abraços!

  • Kukka Web

    ok.. valew ^^ … agora se liga… eu queria nesse mesmo código seu, eu tava tentando o seguinte… fiz uma página com um form, e coloquei o action pra redirecionar pra essa página que envia o newsletter… só que nessa página que eu criei eu queria colocar um campo pra poder colocar o html nesse campo pra dai ele enviar pra a página que envia as news… se pode me ajudar como fazer isso eu agradesço ^^ abraços cara e paz e saude pra ti (y

    • Fala Kukka!

      A resposta pra tua pergunta está nos comentários meu velho!

      Abraços!

  • Kukka Web

    cara o meu próblea tá em… ele envia o e-mail tranquilo… más lá na caixa de e-mail ele msotra todo ocódigo html e naum a newsletter toda formatadazinha :X pode está acontecendo oque ?

    obrigado cara e meus parabens pelo seu post ^^ muito bom mesmo

    • Cara..veja se a configuração do seu e-mail permite a exibição de e-mails em html. Na vídeo aula, se não me engano, eu falo que, se o recipiente não entender HTML, ele vai mostrar como texto puro!

      Abraços!

  • João Carlos

    Me ajudou demais andre, muito obrigado ai !

    • Que isso compadre!!

      Precisando, estamos por aí!

      Abraços!

  • Cesar Borges

    Cara muito boa a Video Aula parabéns

    • Valeu Cesar!

      Obrigado pelo comentário !!!

      Abraços!

  • Marcos

    Caro, andré… show sua aula e script, funfa direitinho, só uma perguntinha basica, estou usando o mesmo scrip porém o meu conteudo que vai dentro do $html tem variáveis de conteudo dinamico que puxam do php, até ai moleza, né? ok… porém o envio é feito, com uma simples excessão os emails do yahoo não leem o conteudo dinamico, os outros todos ok hotmail (por incrivel que pareça.. rsrs) ig, particulares, gmail e tal… alguma sugestao? aguardo amigo! abraços…

    • Fala Marcos!!!

      Seguinte meu amigo! Bem vindo ao mundo da web! rs

      Cara, cada e-mail trabalha de uma maneira diferente. De repente, as contas do Yahoo! estão configuradas para não receber e-mails provenientes de servidores dessa maneira! Esses dias atrás, me questionaram sobre o IBest, que também apresentava o mesmo problema!

      Creio eu que você possa dar uma olhada na caixa de spam, ou nas configurações da conta do Yahoo! para tentar resolver esse problema!

      Quando eu crio aqui as news, no hotmail por exemplo, os caracteres se desconfiguram, enquanto no Thunderbird ele recebe e apresenta todas as formatações corretamente, no Gmail ele me mostra apenas HTML simples.

      Forte abraço e obrigado pelo comentário!

      Até mais!

  • Roberto Gadducci Filho

    Cara, acho que estou meio atrasado mas eu tenho uma sugestão xD
    Ao invés de criar uma instância da classe PHPMailer toda vez no loop, por que não cria ela fora do loop e apenas define dentro do loop os campos dinâmicos?
    Outra coisa mais básica é o uso de condições ternárias, por exemplo:
    $inicio = (!$_GET[‘inicio’]) ? 0 : $_GET[‘inicio’];
    Tem outras coisas, mas percebi que esse é um script bem básico, então ta bem simples e fácil pro pessoal usar ^^
    Abraços, parabéns pelo site e pelos scripts.

  • Silvio

    Fantástica suas aulas, parabéns! Estou tuitando tudo…

    • Ôôôôôôôôôôôôôôôôôôôôôô Silvio!!

      Muito obrigado por divulgar o site meu velho!!

      Abraços!

  • Fabiola

    Estou com problemas com o comando $mail->AddReplyTo, não dá erro e a mensagem é enviada, no cabeçalho do e-mail vem ‘responder para…e-mail correto’, porém quando clico em responder, é o e-mail do $mail->AddAddress que aparece no ‘para’. Uso o google apps, será que pode me ajudar?

    Obrigada!

    • Fala Fabiola!!

      Qual o comando que você está inserindo no link para responder?

      Porque na realidade, para “responder” o e-mail, ele sempre vai responder para quem ESTÁ ENVIANDO a mensagem… nesse caso, para você mesma….se você quiser alterar esse campo, precisaria colocar algum outro e-mail, de repente, na programação…

      Não ficou muito clara a sua pergunta, infelizmente….poste novamente ou me envia por e-mail para que eu possa dar uma analisada e ver se consigo entender melhor suas dúvidas!

      Obrigado pelo contato e fico no aguardo!

      Abraços e até mais!

  • Ronald

    Valeu André, mas eu achei o comando era esse “$Email->ClearAllRecipients();”

    Mas brigadão!

    • Disponha meu vellho!!

      Espero ter lhe ajudado em algo!

      Abraços!

  • Ronald

    Boa tarde André ótimo tópico. Porém como eu faço pra logo depois do primeiro envio limpas os campos do destinatários. Me recordo que já vi isso em algum canto, porém não me lembro. Vc sabe como eu faço isso?

    • Fala Ronald!!

      Eu não entendi direito a sua pergunta, mas tô pensando em uma coisa!! rs

      Vamos lá…vc diz para “limpar” os destinatários correto? O script atualiza automaticamente os destinários, quando envia um novo pacote! Só que funciona apenas no nosso querido Firefox! Não tente usa o Internet Explorer para realizar os envios, pois nem ele, nem o Opera, dão esse “refresh” de maneira automática!!!!

      Espero que seja essa a sua dúvida!

      Abraços!!

  • Orlando

    Gostei muito de seu material, vinha procurando um local para tirar umas dúvidas e sinceramente me ajudou bastante.
    Continue assim, Valeu!

  • André Oliveira

    Opa, agora que fui ver, não tinha observado, também tinha visto o post altas horas da manhã, depois de um tia inteiro “apanhando” pros códigos, hehe. Faltando só o código de progresso, huhu.

    Abraço!

  • André Oliveira

    Fala “xará” muito boa a sua video aula, na realidade já tenho a minha news desenvolvida, estou iniciando na área e aprendendo bastante, até agora uma única coisa que queria fazer na minha news e não consegui é o tão famoso “contador de progressão”, e ter que dar refresh na tela é tenso também, mas ainda não desisti, grande abraço!

    • Fala Xará!!

      Nesse script que eu disponibilizo, o refresh já vem “embutido” nele…. porém, vale observar, que funciona legal no Firefox… não use o mesmo no IE que não rola ok?

      Abraços!

  • Mariana

    Olá André! Parabéns pela iniciativa!! Será que você poderia me ajudar? Como faço para o envio ser através de arquivo .txt ou invés de banco? É possível enviar o cod? Obrigada. Abs,

    • Fala Mariana!

      Eu que te agradeço pelo comentário!!!

      Dá para enviar sim…. pelo banco de dados dá tranquilo… só é mais chato porque vc precisa montar formulários, programação para gravar as informações dentro do banco e depois recuperá-las para posterior envio… agora, quanto à enviar por arquivos TXT, eu sinceramente, nunca tentei!

      Abraços!

  • Rafael

    O dreamweaver e o Fireworks usados no vídeo aula são registrados?
    Se é um programa igual onde encontra?

    • Sim meu velho!!

      São programas registrados!!

      Abraços!

  • Enoch

    Fala pessoal!

    E o seguinte estou com problema nesta linha de codigo:

    @mysql_query(“UPDATE”.$tabela.”SET status = 1 WHERE id = 1″. $id);

    A concatenação do id não funciona.

    Ele pega o primeiro mail e fica mandando diratamento sem para para o mesmo.

    Valeu..

    • Fala Enoch!

      Cara, por acaso vc tá usando o Internet Explorer para efetuar esses envios?

      Se estiver, utilize o Firefox…no IE, só para variar, não roda o script ok?

      Abraços!

  • André sua vídeo aula será muito útil para mim,
    parabéns sua didática é fantástica.
    Abraços

    • Obrigado pela visita e pelo comentário!

      E se está te ajudando, para mim, tá excelente!!!

      Abraços!

      Até mais!

  • João Carlos

    Viu como uso esse script? brother?

    • Como assim compadre????

      Você não assistiu às vídeo aulas?

      Abraços!

  • Darlon

    otimo!

    era oq eu estava prescisando!

    valeu André

    • Ô Compadre!!

      Que maravilha que te ajudou!!!

      Abraços!