Ir para conteúdo

POWERED BY:

Arquivado

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

ronaldosdb

pausa no envio de email

Recommended Posts

Olá pessoal,

Estava pesquisando na web e li que um servidor de emails so pode mandar X quantidade de emails a cada hora.

 

Entaum queria fazer com que meu sistema de envio de emails enviasse de tanto em tanto. Isso é possivel ? nao faco a menor ideia de como fazer.

 

Estou utilizando o seguinte codigo para o envio dos emails:

 

Valeu

Ronaldo

 

//array dos emails 
foreach($_POST["destinatario"] as $destinos)
	{
		$sql_rsdetalhes = "SELECT * FROM newsletter WHERE email = '".$destinos."'";
		$query_rsdetalhes=mysql_query($sql_rsdetalhes) or die (mysql_error());
		$resultado=mysql_fetch_array($query_rsdetalhes); {
		$nome1 = $resultado['nome'];

$cabecalho = '';
$cabecalho .= "From: xx<xx@xx.com.br>\r\n";
$cabecalho .= "Reply-To: xx<xx@xx.com.br>\r\n";
$cabecalho .= "Content-type: text/html; charset=iso-8859-1\r\n";
$cabecalho .= "Disposition-Notification-To: xx@xx.com.br";
$mensagem = "<html><body>$mensagem</body></html>\r\n";
$email = $resultado['email'];
if(@mail($email,$assunto,$mensagem,$cabecalho)) {

	echo "<center><font face=\"Verdana\" color=\"#0000FF\" size=\"2\">Email enviado com sucesso para: "; 
	echo "<b> $nome1 - $resultado[email]</b>";
	echo "</center></font><br>";	
		}else{
		
  echo "<font color=red>FALHA ao enviar email para $nome1 - $resultado[email]</font>";
 		}
  }
  }
 }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ai amigão... pega esse codigo aqui....

 

PHP
//Aqui é um contador de tempo regressivo para o proximo lote

<script language=JavaScript>

<!-- begin

var sHors = "01";

var sMins = "01";

var sSecs = 60;

function getSecs(){

        sSecs--;

        if(sSecs<0)

    {sSecs=59;sMins--;if(sMins<=9)sMins="0"+sMins;}

        if(sMins=="0-1")

    {sMins=59;sHors--;if(sHors<=9)sHors="0"+sHors;}

        if(sSecs<=9)sSecs="0"+sSecs;

        if(sHors=="0-1")

        {sHors="00";sMins="00";sSecs="00";

        clock1.innerHTML=sHors+"<font color=#000000>:</font>"+sMins+"<font color=#000000>:</font>"+sSecs;}

    else

    {

   clock1.innerHTML=sHors+"<font color=#000000>:</font>"+sMins+"<font color=#000000>:</font>"+sSecs;

     setTimeout('getSecs()',1000);

        }

        }

//-->

</script>

<center><b><font color=#ff0000 size=2 face=arial>Tempo restante para o proximo lote: <span id='clock1'></span><script>setTimeout('getSecs()',1000);</script></font></b><br /><br /></center>

<?php

# FileName="Connection_php_mysql.htm"

# Type="MYSQL"

# HTTP="true"

$hostname_Cadastro = "localhost";

$database_Cadastro = "BD";

$username_Cadastro = "USER";

$password_Cadastro = "SENHA";

$Cadastro = mysql_pconnect($hostname_Cadastro, $username_Cadastro, $password_Cadastro) or trigger_error(mysql_error(),E_USER_ERROR); ?>

<?php

 

if (!function_exists("GetSQLValueString")) {

function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")

{

  $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

 

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

 

  switch ($theType) {

    case "text":

      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";

      break;    

    case "long":

    case "int":

      $theValue = ($theValue != "") ? intval($theValue) : "NULL";

      break;

    case "double":

      $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";

      break;

    case "date":

      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";

      break;

    case "defined":

      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;

      break;

  }

  return $theValue;

}

}

 

$currentPage = $_SERVER["PHP_SELF"];

 

//NUmero de e-mails por hora

 

$maxRows_Recordset1 = 80;

$pageNum_Recordset1 = 0;

if (isset($_GET['pageNum_Recordset1'])) {

  $pageNum_Recordset1 = $_GET['pageNum_Recordset1'];

}

$startRow_Recordset1 = $pageNum_Recordset1 * $maxRows_Recordset1;

 

//OLD number e o numero ou palavra que indica que o e-mail nao foi enviado, assim que o e-mail é enviado o STATUS muda de $old_number para $new_number...

 

$old_number = "NAO";

$new_number = "YES";

 

 

mysql_select_db($database_Cadastro, $Cadastro);

$query_Recordset1 = "SELECT * FROM contatos WHERE status = '$old_number' ORDER BY id ASC";

$query_limit_Recordset1 = sprintf("%s LIMIT %d, %d", $query_Recordset1, $startRow_Recordset1, $maxRows_Recordset1);

$Recordset1 = mysql_query($query_limit_Recordset1, $Cadastro) or die(mysql_error());

$row_Recordset1 = mysql_fetch_assoc($Recordset1);

 

 

if (isset($_GET['totalRows_Recordset1'])) {

  $totalRows_Recordset1 = $_GET['totalRows_Recordset1'];

} else {

  $all_Recordset1 = mysql_query($query_Recordset1);

  $totalRows_Recordset1 = mysql_num_rows($all_Recordset1);

}

$totalPages_Recordset1 = ceil($totalRows_Recordset1/$maxRows_Recordset1)-1;

 

$queryString_Recordset1 = "";

if (!empty($_SERVER['QUERY_STRING'])) {

  $params = explode("&", $_SERVER['QUERY_STRING']);

  $newParams = array();

  foreach ($params as $param) {

    if (stristr($param, "pageNum_Recordset1") == false &&

        stristr($param, "totalRows_Recordset1") == false) {

      array_push($newParams, $param);

    }

  }

  if (count($newParams) != 0) {

    $queryString_Recordset1 = "&" . htmlentities(implode("&", $newParams));

  }

}

$queryString_Recordset1 = sprintf("&totalRows_Recordset1=%d%s", $totalRows_Recordset1, $queryString_Recordset1);

?>

 

<?

//Puxa o total de e-mails que Que já foram enviados

 

mysql_select_db($database_Cadastro, $Cadastro);

$query_Recordset3 = "SELECT * FROM contatos WHERE status = '$new_number' ORDER BY id ASC";

$Recordset3 = mysql_query($query_Recordset3) or die(mysql_error());

$totalRows_Recordset3 = mysql_num_rows($Recordset3);

 

//Faz o calculo de quantos registros foram pegos no banco de dados mias 80 e-mails que sairam agora

 

$totaldeemailsqueforam = $totalRows_Recordset3 + 80;

 

//Puxa o total de e-mails que faltam sair

 

mysql_select_db($database_Cadastro, $Cadastro);

$query_Recordset2 = "SELECT * FROM contatos WHERE status = '$old_number' ORDER BY id ASC";

$Recordset2 = mysql_query($query_Recordset2) or die(mysql_error());

$totalRows_Recordset2 = mysql_num_rows($Recordset2);

 

//Faz o calculo de quantos registros foram pegos no banco de dados menos 80 e-mails que sairam agora

 

$totaldeemailsquefalta = $totalRows_Recordset2 - 80;

 

//Escreve quantos e-mails foram e quantos faltam

 

echo "Já sairam <b>".$totaldeemailsqueforam."</b> e-mails<br><br>";

 

echo "Faltam <b>".$totaldeemailsquefalta."</b> e-mails para terminar a entrega de todas as Newsletter´s";

 

?>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<title>Envio confirmado. Aguarde resposta... </title>

</head>

 

<body>

<p>

<?php

 

//////////////////////Começa o loop

 

 

do {

 

$nome=$row_Recordset1['nome'];

$email=$row_Recordset1['email'];

$id=$row_Recordset1['id'];

 

$email_dest = $email;

$corpo = '

Aqui e o corpo do seu e-mail

';

 

mail($email_dest, "TITULO", $corpo,"From:SEU SEITE<mailto:SEU@site.com.br> rnContent-type: text/html; charset=iso-8859-1rn");

 

 

 if(true){

 

 //conecta ao Banco de dados

@ $db = mysql_pconnect('localhost','login,'senha');

 

//Troca o Status de $old_number para $new_number

 

mysql_select_db('BD');

  $query = "UPDATE contatos SET status = '$new_number' WHERE id = $id LIMIT 1";

 

$result=mysql_query($query);

 

//Aqui exibe se o e-mail foi enviado com sucesso...

 

 echo '<img src="confere.gif" width="20" height="15">E-mail para <b>'.$nome.'</b> foi enviado com sucesso. Id de registro = '.$id.'<br><br>';

 

 }

 else {

 

//Se o e-mail nao foi enviado com sucesso aparece essa MSG

 

echo '<img src="erro.gif" width="20" height="15">O e-mail para '.$nome.' não pode ser enviado. Id de registro = '.$id.'<br><br>';

}

 

 } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1));

 

 

if ($pageNum_Recordset1 < $totalPages_Recordset1){ ?>

 

//Aqui é o meta refresh pag de 3700 segundos, quase 1 hora, apos essa 1 hora ele recarrega a página

<meta http-equiv="refresh" content="3700" />

 

 

<?

 

//Aqui exibe o e-mail que foi enviado para todas as pessoas

 

echo "<center>O e-mail enviado para todos foi:</center>";

echo "".$corpo."";

 

}

else { ?>

 

//Se nao tiver mais e-mail ou enviar menos de 80 e-mail, em 5 segundos ele vai para uma pagina chamada sucesso, indicando que todas as news foram enviadas...

 

<meta http-equiv="refresh" content="5;URL=sucesso.html" />

<?

 

}

 

 

 

 

 ?>

 

</body>

</html>

 

 

 

 

Repare bem os comentarios do script, eles indicam a luz nessa bagunça q eu nao tive tempo de arrumar.

 

Esse script eh de minha autoria, usei alguns recursos jah prontos do dreamweaver, por isso ficou essa zona, mas o script funciona muito bem. Qualquer duvida posta ai...

 

So pra constar, os requisitos minimos da tabela no mysql são:

 

ID

nome

email

status

 

Espero que tenha bom proveito... abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Po valeu....Rodrigo, mas você nao poderia me indicar apenas a parte do codigo q pausa, para q eu possa implementar no q ja tenho, pq dai nao preciso perder o q ja fiz.....no caso, a estrutura do banco, etc

 

Pelo q li, seu script eh bem completo, parabens....

 

O guto, teria como você mostrar um exemplo da funcao sleepl no exemplo q eu postei?

 

Valeu

 

Ronaldo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Analizando melhor seu codigo, tem alguns problemas para você realizar a pausa. O foreach que você está usando está sem limite, então, oq podemos fazer é adaptar 2 coisas que considero excencial. Primeiro é inserir o esquema de status, pois isso impede que a mesma pessoa receba o e-mail 2 vezes. E segundo e um refresh ou sleep para carregar novamente a página. Pega ai a adptação:

 

PHP
$old_number = "NAO";

$new_number = "SIM";

//array dos emails

   

foreach($_POST["destinatario"] as $destinos)

    {

        $sql_rsdetalhes = "SELECT * FROM newsletter WHERE status = '".$old_number."' AND email = '".$destinos."' LIMIT 0, 80";

        $query_rsdetalhes=mysql_query($sql_rsdetalhes) or die (mysql_error());

        $resultado=mysql_fetch_array($query_rsdetalhes); {

        $nome1 = $resultado['nome'];

 

$cabecalho = '';

$cabecalho .= "From: xx<xx@xx.com.br>rn";

$cabecalho .= "Reply-To: xx<xx@xx.com.br>rn";

$cabecalho .= "Content-type: text/html; charset=iso-8859-1rn";

$cabecalho .= "Disposition-Notification-To: xx@xx.com.br";

$mensagem = "<html><body>$mensagem</body></html>rn";

$email = $resultado['email'];

if(@mail($email,$assunto,$mensagem,$cabecalho)) {

 

    echo "<center><font face="Verdana" color="#0000FF" size="2">Email enviado com sucesso para: ";

    echo "<b> $nome1 - $resultado</b>";

    echo "</center></font><br>";    

 

 

//Atualiza Status

 

$query = "UPDATE contatos SET status = '$new_number' WHERE id = $id LIMIT 1";

       

 

        }else{

       

  echo "<font color=red>FALHA ao enviar email para $nome1 - $resultado</font>";

        }

  }

  }

}

 

//Sleep eh em segundos, entao 3700 segundos da quase 1 hora

sleep(3700);

 

//Aqui voce coloca o nome dessa mesma pagina que envia newsletter, pois ai ele vai dar um tipo de refresh

header("Location: sua_pagina_php_de_envio.php");

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acrescente logo no início do code:

PHP
set_time_li,it(0);

 

Altere:

PHP
$resultado=mysql_fetch_array($query_rsdetalhes); {

 

Para...

PHP
$cont = 0;

while ($resultado = mysql_fetch_array($query_rsdetalhes)) {

                        $cont = $cont + 1;

                        if (fmod($cont,2)==0){

                                sleep(60);

                        }

Compartilhar este post


Link para o post
Compartilhar em outros sites

e depois ele continua sozinho?

 

posso fazer algo do tipo:

 

 

$cont = 0;
while ($resultado = mysql_fetch_array($query_rsdetalhes)) {
						$cont = $cont + 1;
						if (fmod($cont,2)==0){
								$sleep (60);
							 print "pausa"

						}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode sim. Confira o limite de emails enviados a cada hora imposto por seu servidor. Para testar, coloque como 1 minuto, para sabermos se deu tudo certo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma outra dica, é fazer esta requisição via AJAX, para ter o controle do que está sendo feito. Estava usando o sleep, mas não conseguia pausar o script depois que ele começava a executar, então fiz via ajax uma requisição a cada 10 seg que envia os e-mails.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, o código em si é muito grande e complexo, tem mais de 500 linhas, é uma solução de uma aplicação desenvolvida pela empresa.

 

mas posso dizer que assim:

 

eu tenho uma lista, com 1000 emails. O Ajax vai no arquivo, pega 10 emails que nao foram enviados, envia eles, seta eles como enviados (pode colocar a lista num txt e ir apagando as linhas) e depois retorna um xml

 

quantos faltam

quantos foram enviados

e a porcentagem

 

sorry por nao poder postar o codigo =\

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.