Good Ideas

Subscribe To Comments: come ripulire la lista dei sottoscrittori

Subscribe to comments è un ottimo plugin per WordPress che permette agli utenti del vostro blog di essere informati via email quando qualcuno risponde ai loro commenti. Ma la lista dei sottoscrittori può contenere indirizzi non più validi e necessita di una ripulita. Ecco come fare…

Su Dynamick sono alcuni post contano centinaia di iscritti, molti dei quali con indirizzi email non più validi. Il risultato? Decine e decine di notifiche tornavano indietro al mittente facendo alzare le orecchie ai sistemi di antispam che segnalavano il mio server nelle loro black list.

Bene, rimboccate le maniche, ho sviluppato uno script in PHP che risolve completamente il problema.  Lo script esegue queste operazioni:

  • controlla via IMAP le email nella mia casella di posta,
  • seleziona quelle con un particolare subject (“failure notice”),
  • legge il corpo del messaggio,
  • estrae gli indirizzi email contenuti,
  • li toglie dalla lista dei sottoscrittori del blog e
  • cancella l’email di notifica.

Semplice no? Ecco lo script:

[code lang=”php”]
<?php
// CONFIGURATION
// some php hacks
ini_set(‘error_reporting’, E_ALL);
ini_set(‘display_errors’, ‘On’);
ini_set(‘display_startup_errors’, ‘On’);
ini_set(‘max_execution_time’, 300); //300 seconds = 5 minutes
// mailbox account infos
DEFINE("USER", ‘info@foo.com’); # your email address
DEFINE("PASSWORD", ‘foofoo’); # your email account password
DEFINE("MAILBOX", "{localhost:995/pop3/ssl/novalidate-cert}INBOX"); # this works on my Plesk. See imap_open for more support
DEFINE("FAILURE_SUBJECT", "failure notice"); # the subject that trigger the procedure
// wordpress account
define(‘DB_NAME’, ‘foodbname’); #your blog db name
define(‘DB_USER’, ‘foodbuser’); #your blog db username
define(‘DB_PASSWORD’, ‘kaboom’); #your blog db password
define(‘DB_HOST’, ‘localhost’); #your blog db server
// THE FOLLOWING LINES ARE MAGIC. DO NOT TOUCH!
// open the db
$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
if (!$link) die(‘Could not connect: ‘ . mysql_error());
if (!mysql_select_db(DB_NAME)) {
echo "Unable to select mydbname: " . mysql_error();
exit;
}
// open the mailbox
$mbx = imap_open(MAILBOX, USER, PASSWORD);
$check = imap_check($mbx);
$from = 1;
$to = $check->Nmsgs;
$overviews = imap_fetch_overview($mbx,$from.":".$to);
// cycle through the mails
foreach($overviews as $overview)
{
if ($overview->subject==FAILURE_SUBJECT) {
$matches = Array();
$body = imap_body($mbx, $overview->uid, FT_UID);
$body = strip_tags($body);
preg_match_all(
"([a-z0-9!#$%&’*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&’*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum)\b)siU",
$body,
$matches);
if ($matches[0] && $matches[0][0]) {
$subscriber = $matches[0][0];
$sql = "UPDATE wp_comments SET comment_subscribe=’N’ WHERE comment_author_email=’".addslashes($subscriber)."’";
$result = mysql_query($sql);
echo "Removed $subscriber from the subscriber list<br/>";
imap_delete($mbx, $overview->uid, FT_UID); # Mark to be deleted
}
}
}
// purge the mailbox
imap_expunge($mbx);
?>
[/code]

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *