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.
non riesco a configurarlo, potresti spiegare meglio come fare nel collegamento al database e i vari campi che hai inserito. grazie mille