Originariamente inviato da lorenzo_jazz
Buongiorno, non so se ti puo' essere utile ma io di solito utilizzo un script
abbastanza semplice che ho fatto io e che piu' o meno si comporta cosi':
prma degli header esegue lo script di invio e scegle il numero di mail da mandare per blocco, e ogni 5 secondi fa un refresh di pagina e riesegue lo script partendo dal blocco successivo.
Codice PHP:
<?php
// setto cookie per recupero dati
$oggetto= "Titolo Newsletter";
if (isset($_POST["FCKeditor1"]))
{
$valorecookie=$oggetto."|".$_POST['FCKeditor1'];
setcookie("INVIO",$valorecookie,time()+3600*12);
$data=date('Y/m/d');
$ora=date('H:i');
}
$blocco=$_GET["blocco"];
$newblocco=$blocco+1;
$ultima_email=$blocco*20; // mail da inviare ogni 5 secondi
$prima_email=$ultima_email-20+1;
/* Messaggio di attesa */
echo "<div align=\"center\">";
echo "<h3>Stai inviando la tua news letter</h3>
Non Chiudere questa pagina fino al completamento
";
echo "</div>";
echo "<div align=\"center\">";
echo "<img src=\"ajax-loader.gif\" />";
echo "</div>";
echo "<div align=\"center\">";
echo "Invio da $prima_email a $ultima_email";
echo "</div>";
/// invio mail ////
$fineinvio=1;
$contatore=0;
$strsql="SELECT id,mail FROM mail_list "; // query db
$rs=@mysql_query("$strsql",$link) or die("Errore query database". mysql_error());
while (($riga=mysql_fetch_array($rs))&&($contatore<=$ultima_email))
{
$contatore=$contatore+1;
if (($contatore>=$prima_email)&&($contatore<=$ultima_email))
{
$fineinvio=0;
$id=$riga['id'];
$destinatario=$riga['mail'];
$tipomail="MIME-Version:1.0\nContent-type: text/html; charset=iso-8859-1";
$oggetto= "Titolo Newsletter";
$intestazioni= "From: "TuoNome"<l.maggini@mmdeveloper.it>\r\n$tipomail"; // Return-path
$mittente= "Return-Path: <l.maggini@mmdeveloper.it>\r\n"; // Return-path
$messaggio=stripslashes($_POST['FCKeditor1']);
if (isset($_COOKIE["INVIO"]))
{
$ogg_mess=$_COOKIE["INVIO"];
$riga_email=explode("|",$valorecookie);
$oggetto=$riga_email[0];
$messaggio=stripslashes($riga_email[1]);
}
/// parametri invio mail //////
mail($destinatario, $oggetto, $messaggio, $intestazioni, $mittente);
}
}
if ($fineinvio)
{
header("Location:sended.php");
}
?>
da qui inziano gli header
<!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=utf-8" />
questa riga esegue il refresh
<meta http-equiv="refresh" content="5;url=send.php?blocco=<?=$newblocco?>" />
<title>Invio della newsletter <? echo $oggetto; ?> in corso..... attendere il completamento
</title>
</head>
<body>
</body>
</html>
La pagina sended.php sara' una pagina con un seplice messaggio di rsposta, questa pagina verra' raggiunta al completamento dell'invio delle mail.
Per quanto riguarda lo spam, mi sono accorto che con l'invio di 20 mail ogni 5 secondi, non ho molti problemi.
Lo script e' stato provato per ora con un invio massimo di 2000 mail.
Saluti