
Un plugin php per Wordpress che con l'aiuto delle API di Gemini permette di riconoscere i messaggi di spam per poterli eventualmente contrassegnare o bloccare.
Custom SMTP Spam Filter: proteggi il tuo sito WordPress da messaggi indesiderati
Nella gestione di un sito WordPress, uno dei problemi più comuni è rappresentato dallo spam che arriva attraverso i form di contatto. Questi messaggi non solo intasano la casella di posta, ma possono anche contenere contenuti dannosi. Il plugin Custom SMTP Spam Filter, sviluppato da Emanuele Di Lazzaro, offre una soluzione elegante per filtrare questi messaggi indesiderati prima che vengano inviati.
Panoramica del Plugin
Il plugin "Custom SMTP Spam Filter" è progettato per analizzare tutti i messaggi in uscita dal tuo sito WordPress, valutando il loro contenuto per determinare la probabilità che si tratti di spam. Utilizza l'API di Google Gemini per effettuare questa analisi, assegnando un punteggio da 0 a 100 a ciascun messaggio.
Ecco l'intestazione del plugin che ne fornisce le informazioni di base:
<?php
/*
Plugin Name: Custom SMTP Spam Filter
Plugin URI: https://www.edwarelab.com
Description: Filtra le email in uscita utilizzando un servizio esterno di rilevamento spam
Version: 1.0
Author: Emanuele Di Lazzaro
Author URI: https://www.edwarelab.com
*/
// Blocco accesso diretto al file
if (!defined('ABSPATH')) exit;
Come Funziona il Filtro Anti-Spam
Il cuore del plugin è la funzione calcola_spam()
che utilizza l'API Gemini di Google per analizzare il contenuto del messaggio. Vediamo come funziona:
// Funzione per calcolare lo spam (da implementare con chiamata API esterna)
function calcola_spam($messaggio) {
// Definisci il percorso del file di log
$log_dir = plugin_dir_path(__FILE__) . 'logs/';
// Crea la directory dei log se non esiste
if (!file_exists($log_dir)) {
mkdir($log_dir, 0755, true);
}
// Nome del file di log
$log_file = $log_dir . 'spam_check_' . date('Y-m-d') . '.log';
Questa prima parte della funzione si occupa di creare una directory per i log e impostare il file di log giornaliero. Questo è utile per monitorare l'attività del plugin e verificare quali messaggi vengono identificati come spam.
Sistema di Logging
Il plugin implementa un sistema di logging dettagliato che registra ogni controllo effettuato:
// Funzione di logging personalizzata
function log_spam_check($log_file, $messaggio, $spam_score, $response_raw) {
// Prepara i dettagli del log
$log_entry = date('Y-m-d H:i:s') . " - Verifica Spam\n";
$log_entry .= "Messaggio: " . substr($messaggio, 0, 200) . "...\n";
$log_entry .= "Punteggio Spam: {$spam_score}\n";
$log_entry .= "Risposta Completa: " . json_encode($response_raw) . "\n";
$log_entry .= "-------------------------------------------\n";
// Scrivi nel file
file_put_contents($log_file, $log_entry, FILE_APPEND);
}
Questa funzione registra:
- Data e ora della verifica
- Primi 200 caratteri del messaggio
- Punteggio di spam assegnato
- Risposta completa dell'API di Google
Integrazione con Google Gemini API
Il plugin utilizza l'API di Google Gemini per analizzare i messaggi. Ecco come viene configurata e utilizzata:
// La tua chiave API di Google
$api_key = '*********************';
// URL dell'API Gemini
$url = "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash-002:generateContent?key={$api_key}";
// Istruzioni di sistema per valutare lo spam
$system_instruction = "Sei un esperto assistente che valuta se un messaggio di posta elettronica è spam.
Deve restituire SOLO un numero da 0 a 100 che rappresenta la probabilità di spam:
- 0 = Assolutamente non spam
- 100 = Certamente spam
Criteri di valutazione:
- Linguaggio commerciale aggressivo
- Offerte non richieste
- Richieste di denaro o informazioni personali
- Tono minaccioso o ingannevole
- Lingua non italiana
Restituisci SOLO il numero percentuale di probabilità di spam.";
Nota: Prima di utilizzare il plugin, è necessario sostituire gli asterischi con una chiave API valida di Google Gemini. Puoi ottenere una chiave API registrandoti al servizio Google AI Studio.
Le istruzioni fornite a Gemini sono progettate per valutare il contenuto in base a criteri specifici che identificano tipicamente lo spam, come linguaggio commerciale aggressivo, offerte non richieste, richieste di informazioni personali, e tono ingannevole.
Preparazione e Invio della Richiesta API
Il plugin prepara i dati da inviare all'API e gestisce la risposta:
// Preparazione array di contenuti
$array_coppia = array();
// Aggiungi l'istruzione di contesto
$array_coppia[] = array(
'role' => 'user',
'parts' => array(
array('text' => "Valuta lo spam del seguente messaggio email:")
)
);
// Aggiungi il messaggio da valutare
$array_coppia[] = array(
'role' => 'user',
'parts' => array(
array('text' => $messaggio)
)
);
// Preparazione payload JSON
$content_data = json_encode(array(
'system_instruction' => array(
'parts' => array(
'text' => $system_instruction
)
),
'contents' => $array_coppia
));
Questa parte del codice prepara i dati da inviare a Gemini, strutturandoli secondo le specifiche dell'API.
Esecuzione della Richiesta API
Il plugin utilizza cURL per effettuare la richiesta HTTP all'API di Google:
// Inizializzazione cURL
$ch = curl_init($url);
// Impostazioni cURL
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $content_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Esecuzione richiesta
$response = curl_exec($ch);
// Gestione errori
if(curl_errno($ch)) {
error_log('Errore Gemini API: ' . curl_error($ch));
return 0;
}
// Chiusura cURL
curl_close($ch);
Elaborazione della Risposta
Una volta ricevuta la risposta dall'API, il plugin estrae il punteggio di spam e lo restituisce:
// Decodifica risposta
$decoded_response = json_decode($response, true);
// Estrazione del testo dalla risposta
$spam_score_text = isset($decoded_response['candidates'][0]['content']['parts'][0]['text'])
? $decoded_response['candidates'][0]['content']['parts'][0]['text']
: '';
// Conversione in numero
$spam_score = intval(preg_replace('/[^0-9]/', '', $spam_score_text));
// Logga sempre, indipendentemente dal punteggio
log_spam_check($log_file, $messaggio, $spam_score, $decoded_response);
// Restituisce il punteggio (0-100)
return $spam_score;
Filtro WordPress per le Email in Uscita
Il plugin si integra con WordPress utilizzando il filtro wp_mail
, che viene eseguito prima dell'invio di qualsiasi email:
// Filtro principale per il controllo spam
function custom_wp_mail_spam_filter($args) {
$messaggio = $args['message'];
$body_contains_spam = false;
$quanto_spam = calcola_spam($messaggio);
if($quanto_spam > 50) $body_contains_spam = true;
// Modalità test: aggiungi ***SPAM*** al subject invece di bloccare
if ($body_contains_spam) {
// Logga il tentativo di spam
//error_log('Potenziale spam email: ' . $args['subject']);
// Modifica il subject
$args['subject'] = '***SPAM('.$quanto_spam.')*** ' . $args['subject'];
// Commentato il blocco dell'invio per modalità test
// return false;
}
// Restituisce l'email originale o modificata
return $args;
}
add_filter('wp_mail', 'custom_wp_mail_spam_filter');
Attenzione: Attualmente il plugin è in modalità test e non blocca effettivamente i messaggi di spam, ma aggiunge un prefisso "***SPAM(punteggio)***" all'oggetto dell'email. Per bloccare completamente i messaggi identificati come spam, è necessario decommentare la riga // return false;
.
Funzioni di Attivazione e Disattivazione
Il plugin include anche funzioni per l'attivazione e la disattivazione, che potrebbero essere utilizzate per operazioni aggiuntive:
// Funzione di attivazione del plugin (opzionale)
function custom_spam_filter_activate() {
// Operazioni di attivazione se necessarie
}
register_activation_hook(__FILE__, 'custom_spam_filter_activate');
// Funzione di disattivazione del plugin (opzionale)
function custom_spam_filter_deactivate() {
// Operazioni di disattivazione se necessarie
}
register_deactivation_hook(__FILE__, 'custom_spam_filter_deactivate');
Implementazione e Configurazione
Per utilizzare questo plugin nel tuo sito WordPress:
- Crea una cartella
custom-smtp-spam-filter
nella directory/wp-content/plugins/
del tuo sito - Copia il codice del plugin in un file chiamato
custom-smtp-spam-filter.php
all'interno di questa cartella - Ottieni una chiave API di Google Gemini e sostituiscila nel codice dove indicato
- Attiva il plugin dal pannello di amministrazione di WordPress
- Monitora la cartella
logs
creata dal plugin per verificare l'efficacia del filtro
Considerazioni sulla Soglia di Spam
Il plugin è attualmente configurato per contrassegnare come spam i messaggi con un punteggio superiore a 50. Puoi modificare questa soglia nella funzione custom_wp_mail_spam_filter
in base alle tue esigenze:
$quanto_spam = calcola_spam($messaggio);
if($quanto_spam > 50) $body_contains_spam = true; // Modifica il valore 50 secondo necessità
Conclusioni
Il plugin "Custom SMTP Spam Filter" offre una soluzione efficace per filtrare i messaggi spam generati dai form di contatto del tuo sito WordPress. Sfruttando la potenza dell'intelligenza artificiale di Google Gemini, è in grado di identificare con precisione i messaggi indesiderati, migliorando l'esperienza di gestione del sito.
L'implementazione attuale è in modalità test, permettendoti di verificare l'efficacia del filtro prima di bloccare completamente i messaggi identificati come spam. Una volta soddisfatto delle prestazioni, puoi modificare il codice per bloccare automaticamente questi messaggi.
Nota sulla Privacy: Questo plugin invia il contenuto dei messaggi email all'API di Google Gemini per l'analisi. Assicurati che questa pratica sia conforme alla tua politica sulla privacy e alle normative applicabili sulla protezione dei dati.