Verificare le Email con Perl
Pubblicato il 26-07-2006 da SergioQuanto mi piace Perl.
Raramente mi è capitato di usare un linguaggio così espressivo e potente.
Oggi ho scritto un piccolo script per verificare un gran numero di indirizzi email. Non avevo bisogno solo di verificare la correttezza formale dell’indirizzo: per quello basta questa semplice espressione regolare.
Avevo invece bisogno di verificare se questi indirizzi fossero ancora attivi su internet o fossero stati cancellati.
Grazie al modulo Mail::CheckUser tutto il processo verrà gestito tramite semplici comandi.
Ecco il codice:
use Mail::CheckUser qw(check_email last_check);
open($FILE, ’sorgente.txt’);
@sorgente=split(”,”,< $FILE>);
foreach $email (@sorgente)
{
if(check_email($email))
{
open (LOG,”>>valide.txt”);
print LOG “$email,”;
}
else
{
open (LOG,”>>nonvalide.txt”);
print LOG “$email “,last_check()->{reason}, “,”;
}
}
Come vedi l’intera operazione viene svolta in poche righe.
Il funzionamento è molto semplice:
Inserisci le email che vuoi verificare in un file di testo chiamato sorgente.txt, separandole con una virgola.
Crea due file chiamati valide.txt, nonvalide.txt.
Metti questi tre file nella stessa cartella dove hai salvato il file perl.
Esegui il programmino e il gioco è fatto.
Una volta completata l’esecuzione nel file valide.txt troverai tutte le email valide (separate da una virgola) mentre nel file non valide troverai le email non valide e la ragione per cui non sono state considerate valide.
Mi raccomando: usa questo per scopi nobili.
Non usarlo per verificare le email che hai Harvestato su internet per spammare a tradimento tutti i malcapitati che hai trovato!



Trackback | | Stampa
3 Commenti
bobo ha commentato:
use Mail::CheckUser qw(check_email last_check);
open($FILE, ’sorgente.txt’);
open (LOGV,”>>valide.txt”);
open (LOGNV,”>>nonvalide.txt”);
@sorgente=split(”,”,);
foreach $email (@sorgente)
{
if(check_email($email))
{
print LOGV “$email,”;
}
else
{
print LOGNV “$email “,last_check()->{reason}, “,”;
}
}
close($FILE);
close(LOGV);
close(LOGNV);
Kromeboy ha commentato:
La tua soluzione è certamente più elegante e corretta della mia, però ha un problema per il modo in cui uso questo programma.
Ovvero: avendo moltissime Email da controllare devo poter leggere le modifiche ai file valide/nonvalide mentre il programma è in esecuzione.
Per questo motivo chiudo il riapro il file ogni giro per salvare le modifiche.
In ogni caso su Perl ho ancora tutto da imparare (ad esempio a chiudere i file una volta che li ho aperti).
Grazie della correzione!
Kromeboy ha commentato:
Ok penso di essere arrivato ad una soluzione migliore
open (LOGV,”>>valide.txt”);
open (LOGNV,”>>nonvalide.txt”);
LOGV->autoflush(1);
LOGNV->autoflush(1);
foreach $email (@sorgente)
{
if(check_email($email))
{
print LOGV “$email”;
}
else
{
print LOGNV “$email “,last_check()->{reason}, “\n”;
}
}
close(LOGV);
close(LOGNV);
close($FILE);
In pratica usando autoflush è possibile salvare mano a mano che si procede senza dover chiudere e riaprire il file.
Grazie ancora a bobo per l’aiuto!
Lascia il tuo Commento