Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tudo certo por aí meus amigos?
Bem... vamos ao problema...
Tenho um script de envio de Newsletter que percorre uma base de dados, e que envia uma quantidade de e-mails em um determinado tempo para não "lotar" o servidor, pois bem, ele está funcionando perfeitamente... mas a minha dúvida, é de fazer com que os envios sejam feitos através de um filtro, por exemplo... selecionar apenas um grupo para envio.
Certo, eu já sei como criar o filtro no SELECT para eles, pois vendo do formulário através de um RADIO, isso ele está fazendo bacana, o problema está no refresh, que ele perde o "contato" com esse $_POST que vem do formulário.
Eu já tentei trabalhar com $_SESSION mas não está dando jeito, com certeza eu não esteja trabalhando direito com ele. Então postarei o código comentado aqui da forma simples, enviando o e-mail para todos, sem o filtro, e comentando as linhas para a possível solução:
O Código:
<?php
include "../seguranca/conectar.php";
include "../seguranca/verificar-acao.php";
session_start();
$qnt = "1";
$seg = "10";
$assunto = strip_tags(trim($_POST['assunto']));
//AQUI ELE PEGA O POST QUE VEM DO RADIO NO FORMULÁRIO
// O PROBLEMA É QUE QUANDO ELE DA O REFRESH NO SISTEMA (VERSÃO LOGO ABAIXO)
// ELE PERDE O CONTATO
$destino = strip_tags(trim($_POST['destinatario']));
//CRIANDO SESSION
$_SESSION['destino'] = $destino;
if(!empty($_FILES['foto']['name'])){
$foto = $_FILES['foto'];
$diretorio = "../newsletter-images";
$foto_nome = md5(uniqid(time())) . ".jpg";
$arquivo_temporario = $_FILES["foto"]["tmp_name"];
move_uploaded_file($arquivo_temporario, "$diretorio/$foto_nome");
}
$inicio = $_GET['inicio'];
if($inicio == ""){
$inicio = 0;
}else{
$inicio = $_GET['inicio'];
}
//AQUI ELE FAZ O SELECT DE TODOS OS USUÁRIOS DO BANCO
// O FILTRO SERÁ FEITO COM A INCLUSÃO DA SINTAXE 'AND idCoord <> 0' e 'AND idCoord = 0'
// ISSO É FEITO TRANQUILAMENTE.
// JÁ TENTEI TRABALHAR COM SESSIONS E CRIAR UM if PARA AS OUTRAS DUAS LINHAS
// VEJAM COMO EU COLOQUEI
if($_SESSION['destino'] == 't'){
$rsEnviar = "SELECT * FROM lideres WHERE codStatus = 0 LIMIT ". $inicio .', '.$qnt;
}
if($_SESSION['destino'] == 'c'){
$rsEnviar = "SELECT * FROM lideres WHERE codStatus = 0 AND idCoord <> 0 LIMIT ". $inicio .', '.$qnt;
}
if($_SESSION['destino'] == 'l'){
$rsEnviar = "SELECT * FROM lideres WHERE codStatus = 0 AND idCoord = 0 LIMIT ". $inicio .', '.$qnt;
}
try{
$qrEnviar = $conecta->prepare($rsEnviar);
$qrEnviar->bindValue(':inicio',$inicio,PDO::PARAM_STR);
$qrEnviar->bindValue(':qnt',$qnt,PDO::PARAM_STR);
$qrEnviar->execute();
$contar = $qrEnviar->rowCount($qrEnviar);
}catch(PDOException $e){
session_destroy($_SESSION['dest']);
}
if($contar == "0"){
$atualizar = 'UPDATE lideres SET codStatus = 0';
$qatualizar = $conecta->prepare($atualizar);
$qatualizar->execute();
session_unset($_SESSION['destino']);
session_destroy($_SESSION['destino']);
echo '
<script language= "JavaScript">
location.href="../email-mkt.php"
</script>
';
}else{
//ESSA É A PARTE DO REFRESH, QUE ELE PERDE O CONTATO COM A SESSION, OU SEJA
//QUANDO ELE RECARREGA ELE NÃO PEGA MAIS O VALOR PARA A CONSULTA ACIMA
echo "<meta http-equiv=\"refresh\" content=\"" .$seg. ",URL=?inicio=". $fim ."\">";
}
echo '<div style="width:700px; height:100px; margin:0 auto"><img src="../img/relatorio_email.jpg" /></div>';
echo '<div style="width:700px; font:13px Tahoma, Geneva, sans-serif; color:#900;margin:0 auto; font-weight:bold; margin-top:10px; ">NÃO FECHE ESSA JANELA ATÉ QUE TODOS OS E-MAILS TENHAM SIDO ENVIADOS</div>';
header('Content-Type: text/html; charset=utf-8');
$mensagem = $_POST['mensagem'];
$assunto = strip_tags(trim($_POST['assunto']));
$assunto = utf8_decode($assunto);
$remetente = strip_tags(trim($_POST['remetente']));
$remetente = utf8_decode($remetente);
foreach($qrEnviar as $enviar){
$fim = $inicio + $qnt;
$url = $_SERVER[HTTP_HOST];
$id = $enviar['id'];
$para = $enviar['email'];
$emailsender = "contato@" . $_SERVER[HTTP_HOST];
if(PHP_OS == "Linux") $quebra_linha = "\n"; //Se for Linux
elseif(PHP_OS == "WINNT") $quebra_linha = "\r\n"; // Se for Windows
else die("Este script nao esta preparado para funcionar com o sistema operacional de seu servidor");
if(!empty($_FILES['foto']['name'])){
$mensagemHTML = "
<img src=\"$url/img/email-mkt.jpg\"><br />
<img src=\"$url/newsletter-images/".$foto_nome."\"><br />
$mensagem
<br />
<br />
<br />
<br />
";
}else{
$mensagemHTML = "
<img src=\"$url/img/email-mkt.jpg\"><br />
$mensagem
<br />
<br />
<br />
<br />
";
}
/* Montando o cabeçalho da mensagem */
$headers = "MIME-Version: 1.1".$quebra_linha;
$headers .= "Content-type: text/html; charset=iso-8859-1".$quebra_linha;
$headers .= "From: ".$remetente."<".$emailsender.">".$quebra_linha;
$headers .= "Return-Path: " . $emailsender . $quebra_linha;
$headers .= "Reply-To: ".$emailremetente.$quebra_linha;
$headers .= "X-Priority: 1".$quebra_linha;
$headers .= 'X-Mailer: PHP/' . phpversion();
/* Enviando a mensagem */
$enviar = mail($para, $assunto, $mensagemHTML, $headers, "-r". $emailsender);
if($enviar){
echo "<div style=\"width:700px; margin-top:10px; font:14px Tahoma, Geneva, sans-serif; color:#666; border-bottom:1px solid #900; margin:0 auto; margin-top:5px;\">Menagem enviada para: <span style=\"color:#F90\"><strong>".$para."</strong></span></div>";
$mandar = $conecta->prepare("UPDATE lideres SET codStatus = 1 WHERE id = ".$id);
$mandar->execute();
}else{
echo "E-mail não enviado...";
}
}
?>
No aguardo...
Carregando comentários...