Solução para envio de emails em grande quantidade

Tenho visto que muitos webmasters tem tido dificuldades para enviar algum informativo (newsletter) devido ao limite de envio de emails imposto por alguns hosts, normalmente o limite fica entre 100 e 400 emails por hora. Este problema acaba gerando um grande desconforto, pois, imagine você que nosso site possua 1000 assinantes se você tivesse que

John-Henriquequinta-feira, 29/03/200759

Tenho visto que muitos webmasters tem tido dificuldades para enviar algum informativo (newsletter) devido ao limite de envio de emails imposto por alguns hosts, normalmente o limite fica entre 100 e 400 emails por hora.

Este problema acaba gerando um grande desconforto, pois, imagine você que nosso site possua 1000 assinantes se você tivesse que enviar tudo isso manualmente (existe essa possibilidade?) iria demorar várias horas se não dias.

Os hosts que possuem este limite fazem isso justamente para evitar envio de emails em massa comumente conhecido como SPAM, que nada mais é do que envio de email não solicitado. Apesar do limite imposto alguns usuários talvez até sem saber acabam enviando emails acima do limite, então os emails que ultrapassam o limite são barrados, algumas empresas devolvem o email ao remetente outras apenas cancelam o envio e notificam o remetente. Algumas vezes os administradores do host chegam a decisões extremas como cancelamento da conta de hospedagem quando o envio é continuo.

Pois bem, pensando numa solução para o problema criei um pequeno e simples script em PHP/MySQL que se encarrega de enviar os emails dentro do limite imposto pelo host (ou servidor).

Antes de tudo gostaria de destacar que este material foi criado com intuito de resolver o problema, sendo assim estou me baseando na idéia de que você tenha no mínimo conhecimentos básicos em PHP e MySQL.

Primeiramente crie esta tabela em seu banco MySQL para que você possa utilizar o script.
CREATE TABLE newsletter (
id INT(4) NOT NULL AUTO_INCREMENT,
nome VARCHAR(60) NOT NULL,
email VARCHAR(120) NOT NULL,
codStatus INT(1) NOT NULL DEFAULT 0,
PRIMARY KEY(id)
);

Esta tabela possui quatro campos (id, nome, email e codStatus) estes campos são responsáveis pelo armazenamento e organização dos dados contidos na tabela, a organização consiste em:

  1. ID
    Este campo serve apenas para identificar cada registro como único.
  2. NOME
    Este campo é responsável por armazenar o nome de nosso assinante.
  3. EMAIL
    Este campo é responsável por armazenar o endereço eletrônico (email) de nosso assinante.
  4. CODSTATUS
    Este campo possui papel importante no envio, através dele é que o script identificará pra quem já foi enviado a newsletter. Isso é possível devido ao tipo de campo inteiro tamanho 1, sendo que o valor 0 representa emails que ainda não foram enviados e 1 representa a emails que já foram enviados.

Bom, eu criei a estrutura da tabela, mas, não irei disponibilizar os registros para que a tabela seja populada, sendo assim, você terá que criar ai seus próprios registros.

Tendo nossa tabela criada vamos então (finalmente) ver o tal script.

// DADOS DE ACESSO AO BANCO MYSQL
$host = "HOST";
$banco = "BANCO";
$usuario = "USUARIO";
$senha = "SENHA";

Adicionamos aqui os dados necessários para a conexão com nosso servidor MySQL não há nada extraordinário aqui, se você não sabe quais são estes dados entre em contato com seu servidor de hospedagem para solicita-los.

// NOME DA TABELA
$tabela = "newsletter";
// CAMPOS UTILIZADOS PARA A CONSULTA
$campos = "id, nome, email";
// NUMERO MÁXIMO DE ENVIO
$quant = 10;
// TEMPO ENTRE UM PROCESSO DE ENVIO E OUTRO
$seg = 36;

Na segunda linha informamos o nome da tabela onde se encontram os emails de nossos assinantes, eu criei a variável “$tabela” somente para facilitar as coisas pra quem está utilizando uma tabela com nome diferente.

Na quarta linha informamos os campos que vão ser utilizados no processo do envio. O campo id precisa ser informado pois é através dele que vamos informar qual email acaba de ser enviado.

O campo nome e email (nem precisa falar) são obrigatórios pois vão informar ao script o nome e email do destinatário.

Na sexta linha informamos a quantidade de emails que deve ser enviado por vez. Note que eu adicionei o valor “10″ você pode alterar este valor se quiser.

Na oitava linha informamos o tempo (em segundos) que deve ser aguardado entre um processo de envio e outro.

// DADOS DO EMAIL A SER ENVIADO
$assunto = "Envio de newslleter";
$msg = "Meu primeiro email enviado por pacotes em PHP/MySQL";
$nome_remetente = "Nome Remetente";
$email_remetente = "Email Remetente";

Na segunda linha informamos o título do email a ser enviado, este título corresponde ao assunto do email.

Na terceira linha informamos a mensagem do email, ou seja, a informação que deve ser enviada ao destinatário.

Na quarta e quinta linha informamos o nome e email do remetente (pessoa que envia), este ponto é importante, sempre que possível adicione um email verdadeiro pois é através dele que seu usuário poderá respondê-lo e também por que alguns servidores não permitem o envio de emails via PHP a menos que o campo “remetente” seja um email verdadeiro e principalmente existente no servidor, sendo assim, se seu site chama-se “site.com” seu email deve ser “algumacoisa@site.com”.

// ADICIONA AO CABEÇALHO DO EMAIL AS INFORMAÇÕES DO REMETENTE (QUEM ENVIA)
$cabecalho = "From: ". $nome_remetente ." <". $email_remetente .">";

// ADICIONA O CABEÇALHO PARA ENVIAR FORMATAÇÃO HTML
$cabecalho .= “MIME-Version: 1.0rn”;
$cabecalho .= “Content-type: text/html; charset=iso-8859-1rn”;

// 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;

Nestas linhas fazemos (nesta ordem):

  1. Adicionamos as informações do remetente ao cabeçalho do email para que seja usado posteriormente.
  2. Adicionamos as informações para que o email aceite formatação HTML.
  3. Conectamos com o servidor MySQL, utilizando os dados de usuário, senha e host informados no inicio do script.
  4. Resgatamos o valor de uma variável global que será responsável por informar em qual registro deve ser iniciado o processo de envio dos emails.
  5. Atribuímos variável “$fim” o resultado da soma entre as variáveis “$inicio” e “$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"];
}

  1. Verificamos se o valor da variável “$inicio” é igual a nada.
  2. Caso a verificação retorne verdadeiro, a variável “$inicio” passe a possuir o valor 0 (zero), indicando que ainda não foi enviado nenhum email, ou seja, o processo de envio ainda não começou.
  3. Caso a verificação retorne falso (o valor da variável pode ser qualquer coisa), ou seja, indica que o processo de envio já foi iniciado então a variável “$inicio” passe a possuir o valor que existir na global 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());

  1. Montamos a consulta SQL necessária para retornar os dados solicitados pelo script.
  2. Adicionamos através das variáveis “$campos”, “$tabela”, “$inicio” e “$quant” os valores aos campos que vão ser utilizados no envio, nome da tabela onde encontram-se os dados dos assinantes, o valor que identifica de onde deve iniciar o envio e o valor que informa a quantidade máxima a ser enviada

// 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 .”">”;
}
Esta é uma parte importante no sistema.

  1. Verificamos se a quantidade de registros retornados é 0 (zero), ou seja, nenhum registro encontrado.
  2. Caso a quantidade de registros retornados seja 0 (zero), o script atualiza todos os registros existentes na tabela informada na variável “$tabela” (no meu exemplo “newsletter”), note que a atualização informa que o valor do campo codStatus deve ser alterado para 0. Você deve ter lido isso no início deste artigo.
  3. Após finalizar a atualização de todos os registros exibimos a mensagem informando o término do processo.
  4. Caso a quantidade de registros não seja 0 (zero), ou seja, foi encontrado um ou mais registros é “impresso” a meta refresh, está meta atualiza a página a cada intervalo de segundos, no nosso caso ela será atualizada a cada 10 segundos que foram informados através da variável $seg.
  5. Note que a meta refresh possui dois paramentos content que é o tempo em segundos que devem ser aguardados antes de atualizar a página e URL que é o endereço da página que deve ser carregada após o tempo informado em content, em nosso caso adicionei a parâmetro de url “inicio” que receberá o valor da variável “$fim”, esta variável informa em que número foi finalizado o último processo de envio.
  6. Se o item anterior foi executado o script irá aguardar o tempo informado e depois continuará enviando os emails.

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

// ADICIONAMOS OS PADRÕES DE DESTINATÁRIO
$para = $r["nome"] .”<”. $r["email"] .”>”;

// ENVIA O EMAIL PARA O DESTINATÁRIO
if(mail($para, $assunto, $msg, $cabecalho)){

// INFORMA SE A MENSAGEM FOI ENVIADA
echo “Mensagem enviada para:
r”. $para;

// ALTERO O CODSTATUS PARA 1
@mysql_query(“UPDATE”. $tabela .” SET codStatus = 1 WHERE id = “. $id);
}else{

// INFORMO SE A MENSAGEM NÃO FOI ENVIADA
echo “Mensagem não enviada para:
r”. $para;
}

}

  1. Criamos um laço repetitivo que será responsável por transferir os valores retornados na consulta SQL realizada anteriormente.
  2. Com os dados do destinatário, tentamos enviar o email
  3. Caso o envio seja bem sucedido é exiba a mensagem informando para quem foi enviado e em seguida atualizamos o registro referente ao email que acabamos de enviar, note que agora atualizamos o campo “codStatus” para conter o valor 1 (Email enviado).
  4. Caso a mensagem não seja enviada o script exibe a mensagem informando pra quem não foi possível enviar.

// LIBERA MEMORIA USADA NA CONSULTA
mysql_free_result($sql);
// FECHA A CONEXÃO COM O BANCO
mysql_close($conexao);

  1. Depois de ter realizado a consulta liberamos a memória utilizada no processo. Isso é necessário apenas para grandes consultas, ou para quem tem limite de processamento (CPU).
  2. Fechamos a conexão que haviamos criado anteriormente.

Bom, espero que isso seja útil para você (Demorei muito tempo digitando isso aqui e explicando tudo :D ).

Para aqueles que queiram saber mais sobre as funções utilizadas aqui disponibilizo aqui os links para tais.

mysql_connect()
mysql_close()
mysql_select_db()
mysql_fetch_array()
mysql_free_result()
mysql_query()
mysql_num_rows()
while()
mail()

E por fim disponibilizo aqui o script completo para quem quiser testa-lo ou utiliza-lo.

<?PHP

############################
# O CONTEÚDO DESTE NÃO FOI
# CRIADO COM O INTUITO DE
# DISTRIBUIR SPAM, OBRIGADO.
############################

// DADOS DE ACESSO AO BANCO MYSQL
$host = “HOST”;
$banco = “BANCO”;
$usuario = “USUARIO”;
$senha = “SENHA”;

// NOME DA TABELA
$tabela = “newsletter”;
// CAMPOS UTILIZADOS PARA A CONSULTA
$campos = “id, nome, email”;
// NUMERO MÁXIMO DE ENVIO
$quant = 10;
// TEMPO ENTRE UM PROCESSO DE ENVIO E OUTRO
$seg = 36;

// DADOS DO EMAIL A SER ENVIADO
$assunto = “Envio de newslleter”;
$msg = “Meu primeiro email enviado por pacotes em PHP/MySQL”;
$nome_remetente = “Nome Remetente”;
$email_remetente = “Email Remetente”;

// ADICIONA AO CABEÇALHO DO EMAIL AS INFORMAÇÕES DO REMETENTE (QUEM ENVIA)
$cabecalho = “From: “. $nome_remetente .” <”. $email_remetente .”>”;

// ADICIONA O CABEÇALHO PARA ENVIAR FORMATAÇÃO HTML
$cabecalho .= “MIME-Version: 1.0rn”;
$cabecalho .= “Content-type: text/html; charset=iso-8859-1rn”;

// 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"];

// 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"];
}

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

// 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 DESTINATÁRIO
$para = $r["nome"] .”<”. $r["email"] .”>”;

// ENVIA O EMAIL PARA O DESTINATÁRIO
if(mail($para, $assunto, $msg, $cabecalho)){

// INFORMA SE A MENSAGEM FOI ENVIADA
echo “Mensagem enviada para:
r”. $para;

// ALTERO O CODSTATUS PARA 1
@mysql_query(“UPDATE”. $tabela .” SET codStatus = 1 WHERE id = “. $id);
}else{

// INFORMO SE A MENSAGEM NÃO FOI ENVIADA
echo “Mensagem não enviada para:
r”. $para;
}

}

// LIBERA MEMORIA USADA NA CONSULTA
mysql_free_result($sql);
// FECHA A CONEXÃO COM O BANCO
mysql_close($conexao);
?>

Termos relacionados:

  • envio de email em massa php
  • enviar email em massa php
  • e-mail sem limite de envio
  • como enviar email em grandes quantidades
  • php envio de email em massa
  • enviar emails sem limites
  • quantidade de email
  • e mail sem limite de envio
  • enviar muitos emails com php
  • preciso de um email sem limite de envio

Este post foi útil? Retribua clicando no botão


59 comentários »

  1. Fernando terça-feira, 03/04/2007 em 20:22 - Reply

    Opa eaí meu blz? Baaah dá uma olhadinha no script pronto e compara com o do tuto, tá faltando a variável $para dentro do while, tá dando mysql_free_result na $query sendo que a query tá na $sql.. tem uns detalhezinhos a corrigir mas que está me ajudando muito!

    Agora fica uma questão, queria saber como fazer pra trabalhar com duas tabelas ao mesmo tempo, tipo uma de fornecedores e outra de currículos de um site (tipo ambos receberem a newsletter, mas precisam estar separados por tabelas pois não tem o mesmo tipo de dados), fazendo duas querys ficaria facim né, mas e com uma só? Já tentei INNER JOIN e um monte de coisa mas nada funcionou…

    Muito boa iniciativa e belo blog!
    Congratulations and Good Luck! ;D

  2. John-Henrique terça-feira, 03/04/2007 em 21:15 - Reply

    Realmente eu publiquei o exemplo da explicação diferente do script completo é que eu havia feito para um sistema e por questões de segurança eu modifiquei e acabei esquecendo de alterar os dois. Obrigado por notificar-me.

    Fernando dá pra fazer sim baseando-se em dados de duas ou mais tabelas, mas, pra que eu possa te mostrar como seria eu preciso saber como é a estrutura de suas tabelas.

    Falopa!

  3. Fernando terça-feira, 03/04/2007 em 21:25 - Reply

    – phpMyAdmin SQL Dump
    – version 2.6.4-pl2
    http://www.phpmyadmin.net

    – Servidor: localhost
    – Tempo de Geração: Abr 03, 2007 as 09:38 PM
    – Versão do Servidor: 4.0.27
    – Versão do PHP: 4.3.11

    – Banco de Dados: `recividr_db`

    – ——————————————————–


    – Estrutura da tabela `curriculuns`

    CREATE TABLE `curriculuns` (
    `id` int(15) NOT NULL auto_increment,
    `nome` varchar(100) NOT NULL default ”,
    `dnasc` int(2) NOT NULL default ’0′,
    `mnasc` int(2) NOT NULL default ’0′,
    `anasc` int(4) NOT NULL default ’0′,
    `cpf` varchar(30) NOT NULL default ”,
    `naturalidade` varchar(20) NOT NULL default ”,
    `nacionalidade` varchar(20) NOT NULL default ”,
    `rua` varchar(100) NOT NULL default ”,
    `numero` varchar(20) NOT NULL default ”,
    `complemento` varchar(30) NOT NULL default ”,
    `cidade` varchar(80) NOT NULL default ”,
    `bairro` varchar(20) NOT NULL default ”,
    `foneddd` varchar(5) NOT NULL default ”,
    `fone` varchar(20) NOT NULL default ”,
    `celddd` varchar(5) NOT NULL default ”,
    `cel` varchar(10) NOT NULL default ”,
    `email` varchar(255) NOT NULL default ”,
    `interesse` varchar(50) NOT NULL default ”,
    `conheceu` varchar(50) NOT NULL default ”,
    `formacao` int(2) NOT NULL default ’0′,
    `curso` varchar(255) NOT NULL default ”,
    `cursos_extra` varchar(255) NOT NULL default ”,
    `empresa1` varchar(255) NOT NULL default ”,
    `cargo1` varchar(255) NOT NULL default ”,
    `entrada1` varchar(255) NOT NULL default ”,
    `salario1` varchar(255) NOT NULL default ”,
    `saida1` varchar(255) NOT NULL default ”,
    `empresa2` varchar(255) NOT NULL default ”,
    `cargo2` varchar(255) NOT NULL default ”,
    `entrada2` varchar(255) NOT NULL default ”,
    `salario2` varchar(255) NOT NULL default ”,
    `saida2` varchar(255) NOT NULL default ”,
    `resumo` longtext NOT NULL,
    `desejo` longtext NOT NULL,
    `id_grupo` int(15) NOT NULL default ’0′,
    `codStatus` int(1) NOT NULL default ’0′,
    PRIMARY KEY (`id`)
    ) TYPE=MyISAM AUTO_INCREMENT=4 ;


    – Extraindo dados da tabela `curriculuns`

    INSERT INTO `curriculuns` (`id`, `nome`, `dnasc`, `mnasc`, `anasc`, `cpf`, `naturalidade`, `nacionalidade`, `rua`, `numero`, `complemento`, `cidade`, `bairro`, `foneddd`, `fone`, `celddd`, `cel`, `email`, `interesse`, `conheceu`, `formacao`, `curso`, `cursos_extra`, `empresa1`, `cargo1`, `entrada1`, `salario1`, `saida1`, `empresa2`, `cargo2`, `entrada2`, `salario2`, `saida2`, `resumo`, `desejo`, `id_grupo`, `codStatus`) VALUES (2, ‘Currículo Fictício’, 1, 1, 1920, ”, ”, ”, ”, ”, ”, ”, ”, ”, ”, ”, ”, ”, ”, ”, 1, ”, ”, ”, ”, ”, ”, ”, ”, ”, ”, ”, ”, ”, ”, 3, 0);
    INSERT INTO `curriculuns` (`id`, `nome`, `dnasc`, `mnasc`, `anasc`, `cpf`, `naturalidade`, `nacionalidade`, `rua`, `numero`, `complemento`, `cidade`, `bairro`, `foneddd`, `fone`, `celddd`, `cel`, `email`, `interesse`, `conheceu`, `formacao`, `curso`, `cursos_extra`, `empresa1`, `cargo1`, `entrada1`, `salario1`, `saida1`, `empresa2`, `cargo2`, `entrada2`, `salario2`, `saida2`, `resumo`, `desejo`, `id_grupo`, `codStatus`) VALUES (3, ‘Santo cristo..’, 1, 1, 1920, ”, ”, ”, ”, ”, ”, ”, ”, ”, ”, ”, ”, ‘flashnando@gmail.com’, ”, ”, 4, ”, ”, ”, ”, ”, ”, ”, ”, ”, ”, ”, ”, ”, ”, 5, 0);

    – ——————————————————–


    – Estrutura da tabela `fornecedores`

    CREATE TABLE `fornecedores` (
    `id` int(15) NOT NULL auto_increment,
    `pessoa` int(2) NOT NULL default ’0′,
    `nome` varchar(80) NOT NULL default ”,
    `cpf_cnpj` varchar(11) NOT NULL default ”,
    `inscricao_estadual` varchar(20) NOT NULL default ”,
    `razao_social` varchar(20) NOT NULL default ”,
    `rua` varchar(20) NOT NULL default ”,
    `numero` varchar(10) NOT NULL default ”,
    `complemento` varchar(10) NOT NULL default ”,
    `cidade` varchar(20) NOT NULL default ”,
    `bairro` varchar(20) NOT NULL default ”,
    `foneddd` varchar(4) NOT NULL default ”,
    `fone` varchar(11) NOT NULL default ”,
    `estado` char(2) NOT NULL default ”,
    `site` varchar(255) NOT NULL default ”,
    `email` varchar(80) NOT NULL default ”,
    `tipo_vidro` char(2) NOT NULL default ”,
    `subtipo_vidro` varchar(30) NOT NULL default ”,
    `quantidade` varchar(40) NOT NULL default ”,
    `mensagem` longtext NOT NULL,
    `id_grupo` int(15) NOT NULL default ’0′,
    `codStatus` int(1) NOT NULL default ’0′,
    PRIMARY KEY (`id`)
    ) TYPE=MyISAM AUTO_INCREMENT=5 ;


    – Extraindo dados da tabela `fornecedores`

    INSERT INTO `fornecedores` (`id`, `pessoa`, `nome`, `cpf_cnpj`, `inscricao_estadual`, `razao_social`, `rua`, `numero`, `complemento`, `cidade`, `bairro`, `foneddd`, `fone`, `estado`, `site`, `email`, `tipo_vidro`, `subtipo_vidro`, `quantidade`, `mensagem`, `id_grupo`, `codStatus`) VALUES (4, 1, ‘Fornecedor Fictício’, ”, ”, ”, ”, ”, ”, ”, ”, ”, ”, ”, ”, ‘flashnando@gmail.com’, ’0′, ’0′, ”, ”, 3, 0);

    Bem se ficar muito comprido pode editar ou excluir esse meu comentário pois a minha história está todinha aki: http://forum.wmonline.com.br/index.php?showtopic=175093

  4. Marcos quinta-feira, 12/04/2007 em 09:18 - Reply

    Parse error: syntax error, unexpected T_STRING in /home/.outsider/user001/dentrodabalada.com.br/email.php on line 65

    ta dando esse erro =/

  5. Marcos quinta-feira, 12/04/2007 em 09:20 - Reply

    a linha 65 é essa:

    echo “”;

  6. John-Henrique quinta-feira, 12/04/2007 em 22:53 - Reply

    Marcos, por mais estranho que seja o problema estava sendo causado por uma aspas ao contrário (o fecha aspas) então o interpretador do PHP informava o erro.

    Você deve estar achando que eu estou arrumando uma desculpa, não é? é que eu digitei tudo no word ai ele formata abre e fecha aspas.

    Já está corrigido.

  7. Bruno Thomasi sexta-feira, 15/06/2007 em 13:25 - Reply

    e onde é usado a variavel headers? naum teria q ser concatenada junto com a cabeçalho?
    e a variavel $para dentro do while, ela não deveria ficar do lado de fora do if, já que ela tem q estar definida para poder enviar o email pela função mail?
    e se ela for para o lado de fora, ela continua sendo concatenada com o nome? ou ficaria somente a $para = $r_['email];???

    Obrigado!

  8. John-Henrique sexta-feira, 15/06/2007 em 13:52 - Reply

    BRUNO THOMASI
    Realmente estava errado, foi o mesmo caso desta resposta aqui http://www.vibemidia.com/blog/solucao-para-envio-de-emails-em-grande-quantidade/?preview=true#comment-43

    Falopa!

  9. Bruno Thomasi sexta-feira, 15/06/2007 em 15:14 - Reply

    Tá como $cabecalho = “MIME-Version: 1.0\r\n”;
    tem q ser $cabecalho .= “MIME-Version: 1.0\r\n”;

    e ali no for q eu te perguntei a parte do $para q ta dentro do if(mail teria q estar fora

    tem cmo arrumar?

    valeww!

    fuiz

  10. Bruno Thomasi sexta-feira, 15/06/2007 em 15:25 - Reply

    Ah e outra coisa q eu constatei:

    $inicio = $_GET["inicio"];
    #####————————————————————————————————->>>>>>>>>>>>>>>>>>>>>>>>>
    // 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"];
    }
    #####————————————————————————————————->>>>>>>>>>>>>>>>>>>>>>>>>
    // ATRIBUI O RESULTADO DA SOMA ENTRE INICIO E QUANT
    $fim = $inicio + $quant;

    a parte q faz a soma para gerar o fim deve ser depois dele pegar o dado inicio e não antes como se encontra ;)

    desculpa ser chato mas eh a real eauheahaeu

    valeww

    fuiz

  11. John-Henrique sexta-feira, 15/06/2007 em 15:25 - Reply

    Realmente estava errado, já foi corrigido. O extranho é que eu havia testado isso aqui em minha máquina e depois publiquei, e como você pode ver através dos comentários apareceram diversos erros provavelmente na hora de editar no Word e colar no WordPress. No mais está corrido.

    OBS.: Chato seria se você tivesse dito que estava funcionando normalmente. (Sempre há algo a corrigir ou melhorar)

    Obrigado por informar-me

    Falopa!

  12. rui quinta-feira, 23/08/2007 em 17:42 - Reply

    Olá,

    Tenho um codigo de formulario que envia o e-mails cadastrados para mim.

    Gostaria de saber se é possivel inserir no codigo mais de 1 e-mail para onde o formulario será enviado, sem que o destinatario do e-mail saiba que o msm e-mail foi enviado para mim tb. como se fosse, um e-mail com Cco:.

    Obrigado

  13. John-Henrique sexta-feira, 24/08/2007 em 13:42 - Reply

    @ RUI
    Supondo que seu código envie emails utilizando a função mail() (como o código deste artigo) você pode adicionar vários emails separados por virgula.

    Bom, lembrar que no manual da função mail() não está especificando um número limite de emails, mesmo assim, seria interessante não usar mais de 15.

    A forma correta para adiciona-los seria a seguinte (seguindo o exemplo deste artigo)…

    $para = “nome , nome2 , nome3 “;

    Falopa!

  14. John-Henrique quarta-feira, 29/08/2007 em 14:31 - Reply

    Para o caso de alguém querer saber como enviar o email sem que os destinatários vejam os emails para os quais o email foi enviado.
    O exemplo anterior permite que o destinatário 1 veja o email do destinatário 2 e assim por diante…

    Existem também os parâmetros CC (cópia carbono) e CCO (cópia carbono oculta) esta última impede que o destinatário saiba que a mensagem foi enviada para outras pessoas.

    Para usa-los basta adicionar váriavel cabeçalho…
    Exemplo CC:
    $cabecalho .= “CC: nome1, nome2“;

    Exemplo CCO:
    $cabecalho .= “CCO: nome1, nome2“;

    Falopa!

  15. John-Henrique quarta-feira, 29/08/2007 em 18:13 - Reply

    @ RUI
    No código que você me enviou via email, você pode adicionar os parâmetros que citei acima logo após “From:$nome< $email>“.

    mail (“$emaildest”,”$assunto”,”nome: $nome\n e-mail: $email\n mensagem: $mensagem\n IP:$REMOTE_ADDR\n\n …::: sua mensagem :::…”,”From:$nome< $email> \nCC: nome1“);

    Falopa!

  16. Álisson quinta-feira, 13/09/2007 em 15:44 - Reply

    Tudo bem? Entaum… coloquei os scripts, montei a página, só que não manda a mensagem, aparece a mensagem de erro:

    Mensagem não enviada!!!

    O que pode estar acontecendo???

  17. John-Henrique quinta-feira, 13/09/2007 em 18:17 - Reply

    @ ÁLISSON
    Inicialmente eu diria que o seu servidor não permite o envio de emails via PHP, mas, se fosse isso, seria emitido uma mensagem de erro…

    Então verifique isso.
    1. Os emails estão todos sem espaços no inicio e no final?

    2. Os emails possuem o formato completo, Ex.: login@servidor.com

    3. Os campos da sua tabela no banco de dados possuem os mesmos nomes que a tabela citada por mim no inicio do artigo?

    Aguardo sua resposta.

    Falopa!

  18. Isaac Abraão Silva segunda-feira, 15/10/2007 em 07:49 - Reply

    Bom dia, John.
    Sou novo em PHP e nao entendo muitas coisas asim. Quando testei o script, deu um erro na linha 68.
    Me parece ser o mesmo erro comentado pelo amigo Fernando logo no primeiro comment, mas nao consegui entender bem o que tem que corrigir.
    Poderia ser mais claro ou colocar o script novamente sem o erro pra gente?

  19. Brito Cobra terça-feira, 30/10/2007 em 09:33 - Reply

    Olá a todos! Sou usuário domestico de computador.
    Eu criei um layout e um newsletter na base de um html (Template).

    Tenho alguns programas mas não tenho obtido exito.

    Gostaria de saber sem tem alguem enteressado em me ajudar posso remunerar.

    Agradeço desde já a todos(as)!

  20. John-Henrique terça-feira, 30/10/2007 em 11:55 - Reply

    @ VALDIR

    Bom, em primeiro lugar…

    Este tal WorldCast é um programa instalavel? (Você precisa instala-lo no seu computador para enviar os emails)

    Se for, para fazer o envio de uma newsletter com imagens ou arquivos anexos você precisará primeiramente hospedar estes arquivos na internet e adicionar na newsletter o endereço completo para o local onde encontram-se hospedados os arquivos.

    Se este WorldCast for um programa pago.
    Você provavelmente está com a versão demo instalada, e neste caso talves esta versão não permita o envio completo de uma newsletter, se permitisse pra que alguém iria comprar o programa?

    Falopa!

  21. Brito Cobra terça-feira, 30/10/2007 em 12:05 - Reply

    Você alguma alternativa para alguem que não manja de informatica

  22. John-Henrique terça-feira, 30/10/2007 em 12:36 - Reply

    @ BRITO

    Bom, você havia dito que sua esposa já possui um site, se ele for um site hospedado em servidor pago e possuir PHP habilitado, você pode utilizar um script em PHP para fazer uma newsletter, este artigo mostra como fazer o envio de uma…

    Outra alternativa seria você utilizar algum software como o OutLook ou algo similar para enviar emails, só não seria feito automaticamente…

    Falopa!

  23. John-Henrique terça-feira, 22/04/2008 em 21:11 - Reply

    Qual a mensagem de erro que aparece?

    É exatamente este código que você está usando?
    Se você estiver tentando executar este código em seu computador local irá precisar instalar um servidor de emails, do contrário nunca funcionará.

    Falopa!

  24. Ithalo quinta-feira, 24/04/2008 em 13:11 - Reply

    John

    Não está enviando, estou usando servidor remoto e mesmo assim nada.

  25. Waldir Luiz Tavares quarta-feira, 16/07/2008 em 11:28 - Reply

    não possuo nenhum site, mas, o que eu quero é:

    um programa para enviar e-mails ppara muitos destinatarios ao mesmo tempo e os programas que adquiri paparece não funcionar.

    e sempre que procuro na internet, não encontro nenhum programa que me satisfaça. e não há ninguem queexplica como mandar diversos e-mails a diversas pessoassó falam em enviar diversos e-mails para uma pessoa só.
    que diaboos! quero como já disse, quero mandar varios e-mails para varias pessoas.
    será que fui claro?
    espero uma resposta e muito obrigado.

  26. Marco Pellizzola quinta-feira, 21/08/2008 em 16:08 - Reply

    Bom dia, coloquei seu script para o envio das minhas newsletters. Arrumei as aspas, preenchi com os dados do meu Bd e fiz as consultas.

    Porem quando eu clico em enviar, ele sempre da a mensagem qua as mensagens não puderam ser enviadas para o email tal.

    e o loop está sendo feito corretamente, pois ele mostra corretamente os esmails que eu escolhi na consulta.

    obrigado

  27. John-Henrique quinta-feira, 21/08/2008 em 19:02 - Reply

    @ TODOS
    Vou realizar a correção hoje e publico amanhã pela manhã, não faço idéia de como este problema foi ocorrer.

    Já tem um tempo que não publico nada sobre programação, mas, já tenho um artigo sobre consultas no MySQL que estou finalizando. Para quem quer se aprofundar mais no assunto é uma boa.

    Assinem o FEED pra receber as atualizações feed://http//www.vibemidia.com/feed

    Falopa!

  28. moyses terça-feira, 07/10/2008 em 12:54 - Reply

    Cara preciso de ajuda muitoooo urgente!

    peguei o código que voce postou joguei em uma página, construi o banco. e minha pagina simplesmente nao aparece nada…

    sou novatooooooooo em php…

    então alem desse codigo que voce fez tem que fazer mais alguma coisa???

    preicso entregar um trabalho urgente para um cliente que envolve newsletter…. poderia me ajudar???

  29. John-Henrique sábado, 11/10/2008 em 09:13 - Reply

    @ MOYSES
    Este script que publiquei é apenas a parte para enviar as mensagens, o cadastro dos emails, edição e remoção não estão ai.

    Fica por conta de cada um criar o seu “painel administrativo”. Realmente não tem que aparecer nada só a mensagem informando que está sendo enviado X quantidade de emails.

    Falopa!

  30. robby segunda-feira, 13/10/2008 em 18:14 - Reply

    yVIlZp ghs85n1gdGnbZ95Iis3f

  31. Bruno segunda-feira, 13/10/2008 em 20:22 - Reply

    Gostaria de ver postado o script a funcionar correctamente é que sou novo nisto e esta complicado.

  32. John-Henrique segunda-feira, 20/10/2008 em 00:02 - Reply

    @ BRUNO
    Tem um tempinho que eu não estou atualizando o blog mas, vou dar um jeito de arrumar este script ai pelo menos.

    Falopa!

  33. Como ganhar dinheiro na Internet quarta-feira, 03/12/2008 em 07:55 - Reply

    Parabéns pelo script!

  34. Gildo Roberto Ferreira quarta-feira, 18/03/2009 em 23:01 - Reply

    alguem sabe de um programa bom para envio de emails em grande quantidade? Preciso urgente……
    Por favor me ajude, tenho varios programas mas nenhum funciona.
    Tenho também o wordcast, mas não consigo fazer funcionar, nuca envia as mensagens e sempre da erro.
    se alguem solber de alguma coisa me aviserm, meu email é stc.rober@ibest.com.br.
    muito obrigado!

  35. Rodrigo Silva sexta-feira, 22/01/2010 em 08:43 - Reply

    necessito adicionar um anexo neste email.
    seria apenas utilizar a variavel $attach = “arquivo.txt”;??

    como devo proceder?

    sou inicante em php

  36. Maurício segunda-feira, 08/03/2010 em 06:36 - Reply

    Bom dia a todos, é possível postar o script corrigido para que possamos adapta-lo a algum de nossos sistemas.
    Desde já agradeço a qualidade.

  37. Camila segunda-feira, 21/06/2010 em 09:01 - Reply

    Ola Bom Dia…!!!

    Eu ja fiz tudo em HTML, os substantivos que tem acentos estao normal na pagina, porem quando vou verificar no e-mail as palavras com acentos, ficam tortas, o que eu devo fazer, devo colocar os metas tambem na pagina de PHP??

    • John-Henrique segunda-feira, 21/06/2010 em 10:04 - Reply

      @ CAMILA
      Você provavelmente escreveu o arquivo usando algum editor de textos onde a codificação dos dados não estava em UTF-8, crie um novo arquivo na codificação UTF-8 escreva o código nele, salve e teste novamente.

      Falopa!

  38. Anderson sexta-feira, 03/09/2010 em 09:09 - Reply

    mais facil falar ebraico do que esta lingua do diabo de vocês ai mermão.

    • John-Henrique segunda-feira, 06/09/2010 em 20:12 - Reply

      @ ANDERSON
      Se você não é programador, obviamente que não entenderá nada, igualmente aconteceria se você estivesse lendo alemão ou “a língua do diabo”.

      Falopa!

  39. Junior domingo, 07/11/2010 em 16:29 - Reply

    Olá John!

    Eu poderia utilizar esse script com um crontab? Estou desenvolvendo uma aplicação para envio de newsletters, porem estou sem idéias de como deixar uma tarefa agendada no cron a partir de um valor enviado através de um scrip php.

    Poderia me ajudar, por favor.

    Abraços!

    • John-Henrique domingo, 07/11/2010 em 21:28 - Reply

      @ JUNIOR
      Sim, desta forma também funcionaria, no exemplo, funciona sem o CRON, existem servidores que cobram pelo serviço Cron em adicional, daí resolvi fazer daquele jeito. Você consegue alterar para funcionar somente com CRON, sem muita dificuldade o que muda seria apenas a consulta SQL.

      Falopa!

  40. Everton terça-feira, 23/08/2011 em 11:41 - Reply

    Olá! Muito bom script, testei e rodou muito bem mas, tenho uma dificuldade, pois quando vou trocar o valor va variável $msg pelo o que realmente quero, que é coletado pelo ck editor, o e-mail nõ é enviado… é como se o valor da varável estivesse vazio na hora de enviar, testei enviando para um e-mail e funciona, mas quando vou enviar para vários emials, onde tenho que utilizar esses scripts, o e-mail não é enviado!

    Poderia me ajudar?!

    • John-Henrique terça-feira, 23/08/2011 em 13:51 - Reply

      @ EVERTON
      Você precisa informar de onde vem o novo conteúdo da mensagem, neste caso seria algo como alterar a linha $msg = “Meu primeiro email enviado por pacotes em PHP/MySQL”; por $msg = $_POST['seu_campo_de_texto'];. Mas este script foi criado para receber o valor de $msg escrito diretamente no arquivo, por causa do reload de página que acontece em HTML (Meta refresh), por causa disto, o primeiro conjunto de envios irá receber o valor mas os seguintes não recebem.

      Você pode modificar para consultar a mensagem do seu email, caso esteja salvando em uma base de dados.

      Falopa!

  41. Everton terça-feira, 23/08/2011 em 18:28 - Reply

    Ok, então terei de salvar a mensagem em uma base de dados para em seguida, colocar em uma variável buscando direto do banco de dados, então enviar??

    Isso pode funcionar??

    • John-Henrique terça-feira, 23/08/2011 em 21:07 - Reply

      @ EVERTON
      É exatamente isso que eu disse, você salva a mensagem e sempre que for realizar um novo envio faça uma consulta para resgatar a mensagem e dê o valor para a variável $msg, o resto fica tudo igual.

      Falopa!

  42. Everton quarta-feira, 24/08/2011 em 10:50 - Reply

    Certo, mas quando vou recuperar o e-mail direto da base de dados, para então enviar, ele aparece em forma de tags html, e não formatado. Como se a caixa de e-mail não o conhecesse formatado!

    O que devo fazer?

    • John-Henrique quinta-feira, 25/08/2011 em 17:15 - Reply

      @ EVERTON
      Como assim em formato de tags HTML?

      Falopa!

  43. Everton sábado, 27/08/2011 em 10:57 - Reply

    Tipo, a mensagem é salva no banco de dados.. O que voi digitar abaixo, não sei se o seu site “wordpress” vai interpretar com um texto ou como tag html…

    Everton

    Isso era para, quando fosse resgatar no banco de dados, deveria aparecer o nome “Everton” na cor vermelha, mas não contece, pois quando resgata da base de dados, aparece exatamente como está lá na base de dados.. onde deveria ser interpretado como “Everton” na cor azul!!!

    • John-Henrique sábado, 27/08/2011 em 13:46 - Reply

      @ EVERTON
      Não dá pra reproduzir HTML nos comentários por questões de “segurança”, mostre seu código em http://pastebin.com/ e coloque o link aqui nos comentários.

      Falopa!

  44. Cantor domingo, 04/09/2011 em 06:39 - Reply

    excelente, pra fechar com chave de ouro só faltou o link pra gente testar se realmente fazer o serviço completo divulgando todo o script não só parte dele.

    • John-Henrique segunda-feira, 05/09/2011 em 06:16 - Reply

      @ CANTOR
      Como assim um link pra testar? Se coloco um script pra enviar emails pra teste meu site vira spammer em 20 minutos. O script é tão simples que não precisa testar online, copia, cola, salva e pronto está funcionando.

      Falopa!

  45. Everton quarta-feira, 07/09/2011 em 09:39 - Reply

    Olá!! Os emails esão sendo enviados mas, se de repente a net cair, ele retoma o envio do início, podendo varios usuarios receberem o email duas vezes!! Teria como ver uma forma de enviar emails sem acontecer isso? Tipo, eu inicio os envios daí posso desconectar da net, desligar o computador e o script continuar enviando (sem a necessidade do uso de CRONTAB)!!

    • John-Henrique quarta-feira, 07/09/2011 em 18:03 - Reply

      @ EVERTON
      Não tem como deixar um script rodando sozinho no servidor sem usar crontab, na época que escrevi este script nem todos os servidores de hospedagem forneciam crontab, então, era a melhor solução manter o script rodando no navegador do usuário. No caso de usar o cronjob você simplesmente manda executar uma página a cada 15 minutos, nesta página, faça uma instrução SQL que consulte 100 emails (como exemplo) e envie.

      Se não estou enganado, caso você feche a janela e amanhã volte a executar a página no navegador, a consulta irá pegar apenas os emails com status ’0′, afinal, os emails já enviados ficam marcados com status ’1′, daí não tem como enviar mais de 1 vez a menos que você limpe a tabela newsletter.

      Falopa!

  46. Alex quinta-feira, 08/12/2011 em 19:50 - Reply

    Olha só, no internet explorer o código funciona perfeito, mas no Firefox parece que o código pula um a linha…ao enviar os emails. Sabe o que pode estar acontecendo !!!

  47. Alex quinta-feira, 08/12/2011 em 21:42 - Reply

    Acho que resolvi o problema:

    $fim = ($inicio – 1) + $quant;

    pois quando o sistema coloca 1 para o codstatus e na instrução mysql com o “limit ” e com o “where codstatus=0″ o limit inicia errado pq quando coloca codstatus 1 no primeiro registro o segundo registro vai ser o 0,1 no limit.
    Da uma olhada setando a $quant=1 um email por vez. Fico no aguardo !!! Posso estar errado….

  48. Alex quinta-feira, 08/12/2011 em 22:25 - Reply

    if($inicio == “”){
    $inicio = 0;
    $fim = $inicio + $quant;
    }else{
    $inicio = $_GET["inicio"];
    }

    $fim = ($inicio – $quant) + $quant;

  49. Alex sexta-feira, 09/12/2011 em 18:39 - Reply

    O trecho correto, acho que o mysql considera a parte “where codstatus=0″.

    if($inicio == “”){
    $inicio = 0;
    $fim = $inicio + $quant;
    }else{
    $inicio = $_GET["inicio"];
    }

    $fim = $inicio;

Opine também » Coloque sua foto no comentário