Creare una Procedura per Invio di Newsletters

Per chi come me ha poche migliaia di indirizzi di posta elettronica da dover gestire, acquistare un complesso sistema di invio di newsletter sarebbe molto dispendioso a fronte del ritorno economico, quindi ho creato una pagina web dalla quale soltanto io posso spedire delle email ad un numero fisso di indirizzi.
L’ostacolo che dobbiamo superare per l’invio delle nostre newsletter con un semplice web hosting condiviso è il numero per tempo che occorre rispettare. Si tratta di un modo che hanno i provider di questi servizi per non essere inseriti nelle black list ed essere definiti come spam. Ad esempio nel mio caso ho la possibilità di inviare 300 email all’ora, quindi ho deciso di trattare blocchi di 200 indirizzi per volta.
Creiamo una nuova pagina PHP e la colleghiamo al database MySQL nel quale ci sono gli indirizzi a cui spedire le email. Salvaguardiamo il tutto con l’inserimento di una password, inseriamo una casella di testo per il corpo del messaggio e per ultimo il pulsante che scatenerà l’invio del messaggio.

<?php

   $strInfo = $_REQUEST['regpers'];
   $strIniziaZero = $_REQUEST['deleteall'];

   $bIniziaZero = false;
   if (strlen($strIniziaZero) > 0 && $strIniziaZero == "on")
   	$bIniziaZero = true;

   $totUte = 0;
   $maxInvio = 200;

   require_once('connessione.php');
   mysql_select_db($database, $mydata);

   $query = "SELECT * FROM Utenti WHERE Inviato = 0
           AND Attivo = 1";
   $utenti = mysql_query($query, $mydata) or
           die(mysql_error());
   $uteRow = mysql_fetch_assoc($utenti);
   $totUte = mysql_num_rows($utenti);
   mysql_free_result($utenti);

   if (strlen($strInfo) > 0)
   {
	$strPws = $_REQUEST['pws'];
	if (strlen($strPws) <= 0)
	{
  	   mysql_close($mydata);
	   exit();
	}
	if ($strPws != "mypassword")
	{
	   mysql_close($mydata);
	   exit();
	}

	if ($strInfo == "myinvio")
	{
	   $strInfo = $_REQUEST['notizia'];
	   if (strlen($strInfo) > 0)
	   {
		if ($bIniziaZero)
		{
	 	   // elimino gli invii
		   $query = "UPDATE Utenti SET Inviato = 0";
		   mysql_query($query, $mydata) or
                      die(mysql_error());
		}

		$strHeaders = "From: noreply@miodominio.it\n";
		$strHeaders .= "X-Mailer: Mia Azienda Notizie\n";
		$strHeaders .= "MIME-Version: 1.0\n";
		$strHeaders .= "Content-Type: text/html\n\n";

		$strMsg = '<br><br><p align="left">
                Riceve questa E-Mail perchè
 	               abbonato a Mia Azienda, se desidera
                       interrompere il servizio si prega di
                       fare click su ';

			$realSend = 0;

			$query = "SELECT IDUtente, EMail FROM
                             Utenti WHERE Inviato = 0 
                             AND Attivo = 1 LIMIT 0,$maxInvio";
			$posta = mysql_query($query, $mydata) or
                             die(mysql_error());
			$postaRow = mysql_fetch_assoc($posta);
			$postaNum = mysql_num_rows($posta);

			for ($i = 0; $i < $postaNum; ++$i)
			{
			   $strMessage = $strInfo.$strMsg.'
			   <a href="http://www.miodominio.it/
                                cancnews.php?idnotizia=XXXXXX'.
			   $postaRow['IDUtente'].'XXXXX">questo
                                collegamento</a></p></body>
                                </html>';
			   if (!mail(strtolower(
                                $postaRow['EMail']), "Notizie da
                                Mia Azienda", $strMessage,
                                $strHeaders))
			   {
			      $bMailError = true;
			      break;
			   }

			   $query = "UPDATE Utenti
                            SET Inviato = 1 WHERE IDUtente = ".
                            $postaRow['IDUtente'];
			   mysql_query($query, $mydata) or
                            die(mysql_error());

			   $realSend++;

			   $postaRow = mysql_fetch_assoc($posta);
			}

			mysql_free_result($posta);

			if ($bMailError)
			   $strInfo .= " ERRORE!!!!!";

			mail("mioindirizzo@miodominio.it",
                          "Inviata a ".$realSend." utenti",
                          $strInfo.$strMsg."questo collegamento.
                          </body></html>", $strHeaders);
		   }
	     }
	}

	mysql_close($mydata);

?>

<html>
<head><title>Invio Notizie</title></head>
<body>

<h1 align="center">Invio Notizie</h1>

<?php echo '<h1 align="center">Utenti che devono avere la
              notizia: '.$totUte.'</h1>'; ?>

<div align="center">
<form action="#" method="POST" name="news">

	<input name="pws" type="password" id="pws"
         title="Inserire la password" size="20" maxlength="20">
	<br><br>
	<input name="deleteall" type="checkbox" id="deleteall"
             title="Cancella tutte le spedizioni prima di
             inviare">Inizia da Zero
	<br><br>
	<textarea name="news" type="text" title="News"
          id="notizia" cols="60" rows="20"><html><body></textarea>
	<br><br>
	<input name="regpers" type="hidden" id="regpers"
                value="myinvio">
	<input type="submit" name="invia" id="invia"
               title="Invio" value="Invia">

</form>
</div>

</body>
</html>

Per sicurezza ho inserito una password da sapere per poter inviare i messaggi ed anche una variabile che consente di inviare le email solo se si inviano le richieste dalla stessa pagina. Il programma mi sembra abbastanza chiaro, una volta inviati i messaggi, gli utenti vengono etichettati con un campo booleano positivo, inoltre abbiamo un altro campo per gestire coloro che si vogliono cancellare dall’invio. Se aveste proposte di estensione dell’esempio oppure avete notato qualche errore potete segnalarlo tramite i commenti o il nostro forum.

Informazioni su Giampaolo Rossi

Sviluppatore di software gestionale da oltre 28 anni.
Questa voce è stata pubblicata in PHP e contrassegnata con . Contrassegna il permalink.

Una risposta a Creare una Procedura per Invio di Newsletters

  1. ronb scrive:

    non riesco a configurarlo, potresti spiegare meglio come fare nel collegamento al database e i vari campi che hai inserito. grazie mille

I commenti sono chiusi.