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 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:
- ID
Este campo serve apenas para identificar cada registro como único. - NOME
Este campo é responsável por armazenar o nome de nosso assinante. - EMAIL
Este campo é responsável por armazenar o endereço eletrônico (email) de nosso assinante. - 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.0\r\n”;
$cabecalho .= “Content-type: text/html; charset=iso-8859-1\r\n”;
// 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):
- Adicionamos as informações do remetente ao cabeçalho do email para que seja usado posteriormente.
- Adicionamos as informações para que o email aceite formatação HTML.
- Conectamos com o servidor MySQL, utilizando os dados de usuário, senha e host informados no inicio do script.
- 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.
- 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"];
}
- Verificamos se o valor da variável “$inicio” é igual a nada.
- 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.
- 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());
- Montamos a consulta SQL necessária para retornar os dados solicitados pelo script.
- 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.
- Verificamos se a quantidade de registros retornados é 0 (zero), ou seja, nenhum registro encontrado.
- 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.
- Após finalizar a atualização de todos os registros exibimos a mensagem informando o término do processo.
- 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.
- 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.
- 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;
}
}
- Criamos um laço repetitivo que será responsável por transferir os valores retornados na consulta SQL realizada anteriormente.
- Com os dados do destinatário, tentamos enviar o email
- 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).
- 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);
- 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).
- 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
).
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.0\r\n”;
$cabecalho .= “Content-type: text/html; charset=iso-8859-1\r\n”;
// 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);
?>
O autor se reserva ao direito de não permitir a reprodução deste conteúdo.





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
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!
– 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
ta dando esse erro =/
echo “”;
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.
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!
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!
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
$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
OBS.: Chato seria se você tivesse dito que estava funcionando normalmente. (Sempre há algo a corrigir ou melhorar)
Obrigado por informar-me
Falopa!
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
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!
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…, nome2“;
Exemplo CC:
$cabecalho .= “CC: nome1
Exemplo CCO:, nome2“;
$cabecalho .= “CCO: nome1
Falopa!
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!
Mensagem não enviada!!!
O que pode estar acontecendo???
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!
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?
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)!
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!
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!
É 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!
Não está enviando, estou usando servidor remoto e mesmo assim nada.
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.
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
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!
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???
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!
Tem um tempinho que eu não estou atualizando o blog mas, vou dar um jeito de arrumar este script ai pelo menos.
Falopa!
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!