Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Web Design Valdeci

Sistema de Envio Newsletter com a imagem

Recommended Posts

Bom Dia Pessoal,

 

Estou com problemas em funfar um script php, trabalho com asp e não manjo muito de PHP. Se alguem puder me ajudar agradeço.

 

Fiz um sisteminha que envia newsletter a cada 4 segundos, achei um script que consegue colocar a imagem no corpo da mensagem sem que agente precise habilitar a imagem para aparecer. Testei o script sem meu sisteminha e ele funcionou. Adicionei a ele uma consulta no banco de dados que pega os e-mails dos clientes cadastrados e envia um por um dando refresh na página. Este script já funcionava em outro que fiz. Quando fiz isto ele apareceu um erro na variável que criei para definir o tempo de envio. Vou colar o erro e o script aqui, se alguem puder me ajudar serei grato.

 

Erro: Parse error: parse error, unexpected T_VARIABLE in C:\dominio\envia.php on line 23 na linha 23 tenho isto:

 

$quant = 1;

$seg = 4;

 

quantidade de e-mails a serem enviados e o tempo de cada um ser enviado.

 

Agora o script:

 

<?PHP
if($_POST[conteudo] != "")
$_SESSION[msg] = stripslashes($_POST[conteudo]);
$msg = $_SESSION[msg];

if($_POST[chamada] != "")
$_SESSION[chamada] = $_POST[chamada];
$chamada = $_SESSION[chamada];

if($_POST[imagem] != "")
$_SESSION[imagem] = $_POST[imagem];

$imagem = $_SESSION[imagem];

$obj = new sql();
$inicio = $_GET["inicio"];
if($inicio == ""){
$inicio = 0;
}else{
$inicio = $_GET["inicio"];
}

if($_POST[ramo] != "")
$_SESSION[ramo] = $_POST[ramo];

$ramo = $_SESSION[ramo];

$quant = 1;
$seg = 4;

$fim = $inicio + $quant;

$obj->consultarBD("SELECT id, email FROM clientes ".(($ramo != "")? "where ramo='{$_SESSION[ramo]}'" : "")." LIMIT ". $inicio .",". $quant);
if($obj->numRows() == 0){
echo "<span class='style1'>Fim do processo de envio!</span>";
} else {
echo "
<head><meta http-equiv=\"refresh\" content=\"$seg;URL=http://dominio/pagina.php?inicio=$fim\"></head>";
}

// CRIA O LAÇO REPETITIVO
//while($obj->fetch()){
// ADICIONAMOS OS PADRÕES DE DESTINATÁRIO
$para = $obj->row->email;
$id = $obj->row->id;

$destino = $obj->row->email;
// Inicialmente, vamos setar os dados de configuração.
// Podem ser campos enviados por um fórmulário, ou 
// resgatados do banco de dados... basta adicionar os 
// scripts que forem necessários.
// Ex: $nome = "$HTTP_POST_VARS[nome]";

// Primeiro, o nome e email de quem envia
$nome_r = "Nome da Empresa";
$email_r = "Menu Email";

// Depois, nome e email do destinatário
$nome_d = $destino;
$email_d = $destino;

// Assunto da mensagem
$assunto = $chamada;

// Texto principal da mensagem
$texto = $conteudo;

// Para enviar cópia oculta, deixe $copia = "sim"
$copia = "sim";

// Email para cópia oculta. Pode ser uma lista de emails, separados por ","
$email_c = $destino;
if($copia=="sim"){ $bcc = "Bcc: $email_c\n"; } else { $bcc = ""; }

// Pronto, configurado.
// Agora vamos criar as partes do email, corpo e imagens.

// Abaixo o script para adicionar um logotipo no email.
// Para cada imagem que for utilizar, copie e cole o script
// alterando o nome ( no caso, "top" )
$img_top_nome = $imagem;
$img_top_abre = fopen("../assets/img/images/$img_top_nome", "r");
$img_top_show = fread($img_top_abre, filesize("../assets/img/images/$img_top_nome"));
$img_top_code = chunk_split(base64_encode($img_top_show));
$img_top_cid = "identificador_da_imagem";

// Abaixo vai o código HTML.
// Lembre-se das regras do PHP, como incluir \ antes de ", etc..
// Não copie e cole direto do seu Frontpage ou Dreamweaver...
$body_html = "<html><head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">
</head><body bgcolor=\"#FFFFFF\"><div align=\"center\">
<table width=\"478\" border=\"0\" cellspacing=\"10\" cellpadding=\"0\"><tr><td>
<img src=\"cid:$img_top_cid\"></td></tr><tr><td>
<p><font face=\"Verdana, Arial\" size=\"1\">$texto</font></p>
<p><font face=\"Verdana, Arial\" size=\"1\"><b>
Neo Comunicação
</a></b></font></p></td></tr></table></div></body></html>";

// Script para transformar o código em texto simples
// Não é necessário alterar.
$body_text = str_replace("<br>","\n",$body_html);
$body_text = strip_tags("$body_text");


// O Email é no formato MIME multipart.
// Abaixo os separadores das partes
$sep_0 = "===SEPARADOR_0000000000===";
$sep_1 = "===SEPARADOR_1111111111===";

// Aqui começa o Header da mensagem. Não é necessário alterar nada.
$header = "";
$header.= "From: $nome_r <$email_r>\n";
$header.= "$bcc";
$header.= "Content-type: multipart/related; type=\"multipart/alternative\";\n";
$header.= "              boundary=\"$sep_0\"\n";
$header.= "MIME-Version: 1.0\n";

// Altere para 1 e para High e o email terá "urgência"
$header.= "Priority: 3\n";
$header.= "X-Priority: Normal\n";

// Programa que enviou o email  =)
$header.= "X-Mailer: Alexx Ares HTML Mail 2004\n";
$header.= "          © Alexx Ares - alexxares@bol.com.br\n";
$header.= "\n\n";

// Aviso para emails antigos que não suportam MIME
$header.= "Esta é uma mensagem multi-partes em formato MIME.\n";
$header.= "\n";
$header.= "This is a multi-part message in MIME format.\n";
$header.= "\n\n";

// Aqui começa o corpo do email. 
// Ele vai com dois códigos alternativos, HTML e texto puro
// O próprio programa de email escolhe o melhor
// No final, vão as imagens.
$mensagem = "--$sep_0\n";
$mensagem.= "Content-Type: multipart/alternative; boundary=\"$sep_1\"\n";
$mensagem.= "\n";

$mensagem.= "--$sep_1\n";
$mensagem.= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
$mensagem.= "Content-Transfer-Encoding: 7bit\n";
$mensagem.= "\n$body_text\n";
$mensagem.= "\n";

$mensagem.= "--$sep_1\n";
$mensagem.= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
$mensagem.= "Content-Transfer-Encoding: 7bit\n";
$mensagem.= "\n$body_html\n";
$mensagem.= "\n";

$mensagem.= "--$sep_1--\n";
$mensagem.= "\n";

// Aqui o código para uma imagem.
// para mais imagens, copie e cole, alterando o nome "top"
$mensagem.= "--$sep_0\n";
$mensagem.= "Content-Type: image/jpg; name=\"$img_top_nome\"\n";
$mensagem.= "Content-Transfer-Encoding: base64\n";
$mensagem.= "Content-ID: <$img_top_cid>\n";
$mensagem.= "\n$img_top_code\n";
$mensagem.= "\n";

// Fim da mensagem!
$mensagem.= "--$sep_0--";

// Agora é só enviar!!
$enviar = @mail("$nome_d<$email_d>","$assunto",$mensagem,$header);
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, vamos começar pelo básico...

 

- Coloque aspas simples nos índices... Assim...

 

$msg = $_SESSION['msg'];

- Indente seu código corretamente.

 

if($_POST[conteudo] != "")
$_SESSION[msg] = stripslashes($_POST[conteudo]);// só esta linha está dentro do if.
$msg = $_SESSION[msg];// esta linha está fora do if. é isto mesmo?

Não consegui identificar este erro.

 

Faça estas alterações e veja se resolve.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela resposta Carlos Eduardo,

 

Mas ainda dá erro. Não saco mt de PHP, fiz as modificações que me passou, tentei outras formas tb mas ainda dá erro:

 

Parse error: parse error, unexpected T_IF in C:\Inetpub\vhosts\compuwaycursos.com.br\httpdocs\adm\envia.php on line 5

 

A linha 5 é: if($_POST['quant'] != "")

 

Pode me ajudar?

 

$ramo = 29


if($_POST['quant'] != "")
$_SESSION['quant'] = $_POST['quant'];
$quant = $_SESSION['quant'];

if($_POST['seg'] != "")
$_SESSION['seg'] = $_POST['seg'];
$seg = $_SESSION['seg'];

if($_POST['conteudo'] != "")
$_SESSION['conteudo'] = stripslashes($_POST['conteudo']);
$conteudo = $_SESSION['conteudo'];

if($_POST['chamada'] != "")
$_SESSION['chamada'] = $_POST['chamada'];
$chamada = $_SESSION['chamada'];

if($_POST['imagem'] != "")
$_SESSION['imagem'] = $_POST['imagem'];
$imagem = $_SESSION['imagem'];

$obj = new sql();
$inicio = $_GET["inicio"];
if($inicio == ""){
$inicio = 0;
}else{
$inicio = $_GET["inicio"];
}

$fim = $inicio + $quant;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala brother,

 

Agora não deu mais erro. Mas não chega o e-mail. No final do script coloquei uma condição pra eu ver se enviou ou não assim:

 

if ($enviar = @mail("$nome_d<$email_d>","$assunto",$mensagem,$header)){
echo "<span class='style1'>Mensagem enviada para: $para  </span>";
} else {
echo "<span class='style1'>Mensagem não enviada para: $para  </span>";
}

O script passa mas agora ele aparece que a mensagem não foi enviada e realmente não chega. Testei este script sem receber as variáveis e funfou. Será que eu fiz outra kgda. hehe.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça o seguinte. A @ serve para suprimir mensagens de erro. Tira ela. Outra coisa é imprimir as variáveis que estão na função antes de executar.

 

Assim

 

echo 'Nome = '.$nome;// faz isto para as outras.
if ($enviar = mail("$nome_d<$email_d>","$assunto",$mensagem,$header)){

 

Outra opção é enviar com a classe PHPMailer. Postei um script bacana sobre envio para múltiplos destinatários no laboratório de scripts.

 

http://forum.imasters.com.br/index.php?/topic/363321-formulario-de-contato-com-multiplos-destinatarios/

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa Tarde Carlos,

 

Seu que já estou enxendo o saco mas não dá pra entender porque não envia. Já fiz tudo que você me passou mas ele ainda não envia.

 

Testei retirando o $destino; da variável que pega o e-mail e colocar meu e-mail mesmo e funcionou.

 

Não entendo porque não funciona quando tento chamar do banco de dados este e-mail. O engraçado é que ele imprime certinho o endereço de e-mail.

 

Obrigado.

 

Valdeci Alves

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ele está hospedado no momento.

 

Se quiser posso passar o caminho para você ver o que está acontecendo.

 

O Script tá assim agora:

 

<?php
session_start();
require('require/config.php');
$mostraLayout = new layout();
require('require/cabecalho.php');
?>

<?PHP
if($_POST[ramo] != "")
$_SESSION[ramo] = $_POST[ramo];

$ramo = $_SESSION[ramo];


if($_POST[quant] != "")
$_SESSION[quant] = $_POST[quant];
$quant = $_SESSION[quant];

if($_POST[seg] != "")
$_SESSION[seg] = $_POST[seg];
$seg = $_SESSION[seg];

if($_POST[conteudo] != "")
$_SESSION[conteudo] = stripslashes($_POST[conteudo]);
$conteudo = $_SESSION[conteudo];

if($_POST[chamada] != "")
$_SESSION[chamada] = $_POST[chamada];
$chamada = $_SESSION[chamada];

if($_POST[imagem] != "")
$_SESSION[imagem] = $_POST[imagem];
$imagem = $_SESSION[imagem];

$obj = new sql();
$inicio = $_GET["inicio"];
if($inicio == ""){
$inicio = 0;
}else{
$inicio = $_GET["inicio"];
}

$fim = $inicio + $quant;

$obj->consultarBD("SELECT id, email FROM clientes ".(($ramo != "")? "where ramo='{$_SESSION[ramo]}'" : "")." LIMIT ". $inicio .",". $quant);
if($obj->numRows() == 0){
echo "<span class='style1'>Fim do processo de envio!</span>";
} else {
echo "
<head><meta http-equiv=\"refresh\" content=\"$seg;URL=http://site/envia.php?inicio=$fim\"></head>";
}

// CRIA O LAÇO REPETITIVO
//while($obj->fetch()){
// ADICIONAMOS OS PADRÕES DE DESTINATÁRIO
$para = $obj->row->email;
$id = $obj->row->id;

$destino = $obj->row->email;
// Inicialmente, vamos setar os dados de configuração.
// Podem ser campos enviados por um fórmulário, ou 
// resgatados do banco de dados... basta adicionar os 
// scripts que forem necessários.
// Ex: $nome = "$HTTP_POST_VARS[nome]";

// Primeiro, o nome e email de quem envia
$nome_r = "Minha Empresa";
$email_r = "Meu E-mail";

// Depois, nome e email do destinatário
$nome_d = $destino;
$email_d = $destino;

// Assunto da mensagem
$assunto = $chamada;

// Texto principal da mensagem
$texto = $conteudo;

// Para enviar cópia oculta, deixe $copia = "sim"
$copia = "sim";

// Email para cópia oculta. Pode ser uma lista de emails, separados por ","
$email_c = $destino;
if($copia=="sim"){ $bcc = "Bcc: $email_c\n"; } else { $bcc = ""; }

// Pronto, configurado.
// Agora vamos criar as partes do email, corpo e imagens.

// Abaixo o script para adicionar um logotipo no email.
// Para cada imagem que for utilizar, copie e cole o script
// alterando o nome ( no caso, "top" )
$img_top_nome = $imagem;
$img_top_abre = fopen("../assets/img/images/$img_top_nome", "r");
$img_top_show = fread($img_top_abre, filesize("../assets/img/images/$img_top_nome"));
$img_top_code = chunk_split(base64_encode($img_top_show));
$img_top_cid = "identificador_da_imagem";

// Abaixo vai o código HTML.
// Lembre-se das regras do PHP, como incluir \ antes de ", etc..
// Não copie e cole direto do seu Frontpage ou Dreamweaver...
$body_html = "<html><head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">
</head><body bgcolor=\"#FFFFFF\"><div align=\"center\">
<table width=\"478\" border=\"0\" cellspacing=\"10\" cellpadding=\"0\"><tr><td>
<img src=\"cid:$img_top_cid\"></td></tr><tr><td>
<p><font face=\"Verdana, Arial\" size=\"1\">$texto</font></p>
<p><font face=\"Verdana, Arial\" size=\"1\"><b>
Neo Comunicação
</a></b></font></p></td></tr></table></div></body></html>";

// Script para transformar o código em texto simples
// Não é necessário alterar.
$body_text = str_replace("<br>","\n",$body_html);
$body_text = strip_tags("$body_text");


// O Email é no formato MIME multipart.
// Abaixo os separadores das partes
$sep_0 = "===SEPARADOR_0000000000===";
$sep_1 = "===SEPARADOR_1111111111===";

// Aqui começa o Header da mensagem. Não é necessário alterar nada.
$header = "";
$header.= "From: $nome_r <$email_r>\n";
$header.= "$bcc";
$header.= "Content-type: multipart/related; type=\"multipart/alternative\";\n";
$header.= "              boundary=\"$sep_0\"\n";
$header.= "MIME-Version: 1.0\n";

// Altere para 1 e para High e o email terá "urgência"
$header.= "Priority: 3\n";
$header.= "X-Priority: Normal\n";

// Programa que enviou o email  =)
$header.= "X-Mailer: Alexx Ares HTML Mail 2004\n";
$header.= "          © Alexx Ares - alexxares@bol.com.br\n";
$header.= "\n\n";

// Aviso para emails antigos que não suportam MIME
$header.= "Esta é uma mensagem multi-partes em formato MIME.\n";
$header.= "\n";
$header.= "This is a multi-part message in MIME format.\n";
$header.= "\n\n";

// Aqui começa o corpo do email. 
// Ele vai com dois códigos alternativos, HTML e texto puro
// O próprio programa de email escolhe o melhor
// No final, vão as imagens.
$mensagem = "--$sep_0\n";
$mensagem.= "Content-Type: multipart/alternative; boundary=\"$sep_1\"\n";
$mensagem.= "\n";

$mensagem.= "--$sep_1\n";
$mensagem.= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
$mensagem.= "Content-Transfer-Encoding: 7bit\n";
$mensagem.= "\n$body_text\n";
$mensagem.= "\n";

$mensagem.= "--$sep_1\n";
$mensagem.= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
$mensagem.= "Content-Transfer-Encoding: 7bit\n";
$mensagem.= "\n$body_html\n";
$mensagem.= "\n";

$mensagem.= "--$sep_1--\n";
$mensagem.= "\n";

// Aqui o código para uma imagem.
// para mais imagens, copie e cole, alterando o nome "top"
$mensagem.= "--$sep_0\n";
$mensagem.= "Content-Type: image/jpg; name=\"$img_top_nome\"\n";
$mensagem.= "Content-Transfer-Encoding: base64\n";
$mensagem.= "Content-ID: <$img_top_cid>\n";
$mensagem.= "\n$img_top_code\n";
$mensagem.= "\n";

// Fim da mensagem!
$mensagem.= "--$sep_0--";

// echo 'Destino = '.$destino;// faz isto para as outras.
// echo 'Para = '.$para;// faz isto para as outras.
// echo 'Conteudo = '.$conteudo;// faz isto para as outras.
// echo 'Imagem = '.$img_top_nome;// faz isto para as outras.


// Agora é só enviar!!
if ($enviar = mail("$nome_d<$email_d>","$assunto",$mensagem,$header)){
echo "<span class='style1'>Mensagem enviada para: $para  </span>";
} else {
echo "<span class='style1'>Mensagem não enviada para: $para  </span>";
}
?>

Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá... vamos lá...

 

Tenta habilitar todas as mensagens de erro... Coloca este script no início do código.

 

<?php
ini_set('display_errors', 1); 
error_reporting(E_ALL);
?>

Veja se aparece alguma coisa.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apareceu isto:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\Inetpub\vhosts\compuwaycursos.com.br\httpdocs\adm\envia.php:7) in C:\caminhosite\envia.php on line 8

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\Inetpub\vhosts\compuwaycursos.com.br\httpdocs\adm\envia.php:7) in C:\caminhosite\envia.php on line 8

Notice: A session had already been started - ignoring session_start() in C:\caminhosite\require\config.php on line 2
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

O Arquivo config está assim:

 

<?
session_start();

//TABELAS
$tabelas['clientes'] = "clientes";
$tabelas['templates'] = "templates";
$tabelas['periodo'] = "periodo";

//EMAIL WEBMASTER
define('EMAIL_WEBMASTER', 'MeuEmail');

//VARIAVEL DE SESSAO DO USUARIO DO SITE
define('USER_SESSAO', 'clinica_site');

//MENSAGENS
define("INSERIR", "INSERIDO COM SUCESSO.");
define("EDITAR", "EDITADO COM SUCESSO.");
define("EXCLUIR", "EXCLUIDO COM SUCESSO.");
define("ERRO", "OCORREU UM ERRO, TENTE NOVAMENTE.");
define("NENHUM", "NENHUM REGISTRO ENCONTRADO.");
define("EXISTE", "DADOS JÁ CADASTRADOS.");

require('require/funcoes.php');
require('require/paginacao.php');
//extract($_POST);
//extract($_GET);
error_reporting(0);
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem vários erros...

 

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by

 

http://forum.imasters.com.br/index.php?/topic/342563-dicas-para-uso-de-variaveis-de-sessao/

 

Notice: A session had already been started - ignoring session_start() in C:\caminhosite\require\config.php on line 2

 

Inicie a sessão somente uma vez. Retire códigos duplicados.

 

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

 

Erro do Mysql em alguma consulta. Imprima-as antes de executar e tente identificar o erro, que é de sintaxe.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz o que me falou,agora não aparece erro, mas não envia tb.

 

Mas valei pela ateção, vou quebrando a kbça aqui, qualquer coisa peço novamente ajuda.

 

Imprimi o conteudo todo na página:

 

Veja:

 

Ramo = 29
Destino = E-amil E-mail do BD
Para = E-amil E-mail do BD
Conteudo = 
A cada dia que passa, a informática vem adquirindo cada vez mais importância na vida das pessoas e nas empresas. Sua utilização já é vista como instrumento de aprendizagem e sua ação no meio social vêm aumentando de forma rápida entre as pessoas. Cresce o número de famílias que possuem em suas residências um computador.

Esta ferramenta está auxiliando pais e filhos mostrando-lhes um novo jeito de aprender e ver o mundo. Quando se aprende a lidar com o computador novos horizontes se abrem na vida das pessoas, mas principalmente, novas oportunidades aparecem, quem está preparado leva grande vantagem.

Nas empresas não poderia ser diferente, todas necessitam ser informatizadas para se manter no mercado e acompanhar as tecnologias, o computador veio para inovar e facilitar a vida das empresas. Atualmente nenhuma empresa pode ficar sem o auxílio da informática, é através dela,que tudo é resolvido.

O mundo está informatizado, A informática talvez seja a área que mais influenciou o curso do século XX. Se hoje vivemos na Era da Informação, isto se deve ao avanço tecnológico na transmissão de dados e às novas facilidades de comunicação, ambos impensáveis sem a evolução dos computadores. 

Imagem = {8071C77B-AF71-4874-BFA8-512FB6E244D7}_1117048_30623906 laptop.jpg

Mensagem não enviada para: E-amil E-mail do BD

Valeu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.