POD2-IT
view release on metacpan or search on metacpan
IT/perlfaq9.pod view on Meta::CPAN
consigliata. Piuttosto, guardate
http://www.cpan.org/authors/Tom_Christiansen/scripts/ckaddr.gz ,
che di fatto esegue un controllo seguendo tutte le specifiche dell'RFC
(a parte i commenti innestati), cerca gli indirizzi dai quali potreste
non voler accettare mail (Bill Clinton o il vostro postmaster, diciamo),
e poi si assicura che l'hostname dato sia rintracciabile nei descrittori
di tipo MX del DNS. Non E<egrave> veloce, ma svolge i compiti che si prefigge.
Il nostro consiglio per verificare l'indirizzo di posta elettronica di
una persona E<egrave> far sE<igrave> che scriva il proprio indirizzo due
volte, come si fa normalmente per cambiare una password. Questo di solito
elimina gli errori di battitura. Se le due versioni coincidono, mandate
una mail all'indirizzo, con un messaggio personale che assomigli al seguente:
Caro utente@host.com,
Per favore, conferma, rispondendo a questo messaggio, l'indirizzo
email che ci hai dato Mercoledi` 6 Maggio 2003 alle ore 9:35.
Includi nella risposta la stringa "Supercalifragilistichespiralidoso",
ma scritta al contrario; in altre parole, comincia con "Osod...".
Una volta fatto, il tuo indirizzo confermato verra` incluso nei
nostri archivi.
Se vi arriva la risposta e l'utente ha seguito le vostre istruzioni, potete
essere ragionevolmente certi che l'indirizzo E<egrave> reale.
Una strategia correlata, meno vulnerabile alla contraffazione, E<egrave>
dare all'utente un PIN (personal ID number: numero di identificazione
personale). Registrate l'indirizzo e il PIN (meglio se casuale) per l'uso
futuro. Nella mail che inviate, chiedete all'utente di includere il PIN
nella sua risposta. Se perE<ograve> la mail torna indietro, o il messaggio
viene incluso in una mail di risposta automatica tipo "Sono in vacanza",
il PIN ci sarE<agrave> comunque. Quindi il meglio E<egrave> chiedere di
rispondere con una versione decisamente modificata del PIN, ad esempio
con i caratteri invertiti, oppure con un'unitE<agrave> aggiunta o
sottratta ad ogni cifra, eccetera.
=head2 Come si decodifica una stringa MIME/BASE64?
Il pacchetto MIME-Base64 (disponibile su CPAN) tratta sia questa sia la
codifica MIME/QP. Decodificare da BASE64 diventa semplice:
use MIME::Base64;
$decodificato = decode_base64($codificato);
Il pacchetto MIME-Tools (disponibile su CPAN) supporta l'estrazione con
decodifica degli allegati codificati in BASE64, direttamente dai messaggi
email.
Se la stringa da decodificare E<egrave> breve (lunga meno di 84 byte) un
approccio piE<ugrave> diretto E<egrave> quello di usare il formato "u"
della funzione unpack() dopo una semplice translitterazione:
tr#A-Za-z0-9+/##cd; # rimuove i caratteri non base64
tr#A-Za-z0-9+/# -_#; # converte nel formato uuencode
$lungh = pack("c", 32 + 0.75*length); # calcola la lunghezza in byte
print unpack("u", $len . $_); # effettua l'uudecode e stampa
=head2 Come ottengo l'indirizzo e-mail dell'utente?
Sui sistemi che supportano getpwuid, la variabile $<, ed il modulo
Sys::Hostname (che E<egrave> incluso nella distribuzione standard del perl),
potete probabilmente provare ad utilizzare qualcosa come:
use Sys::Hostname;
$address = sprintf('%s@%s', scalar getpwuid($<), hostname);
Le politiche aziendali sugli indirizzi e-mail possono far sE<igrave> che questo
codice generi indirizzi che il sistema di posta aziendale non accetta,
dunque dovrete chiedere gli indirizzi direttamente agli utenti, quando vi servono.
Inoltre, non tutti i sistemi su cui gira Perl rendono disponibili
queste informazioni come fa Unix.
Il modulo Mail::Util da CPAN (parte del pacchetto MailTools) fornisce una
funzione mailaddress() che cerca di supporre l'indirizzo e-mail dell'utente.
La supposizione E<egrave> piE<ugrave> intelligente rispetto al codice sopra
riportato, poichE<eacute> fa uso di informazioni fornite al modulo al
momento dell'installazione, ma potrebbe essere anch'essa errata. Ancora,
il modo migliore E<egrave> spesso quello di chiedere all'utente.
=head2 Come spedisco la posta?
Usate direttamente il programma C<sendmail>:
open(SENDMAIL, "|/usr/lib/sendmail -oi -t -odq")
or die "Impossibile aprire sendmail: $!\n";
print SENDMAIL <<"EOF";
From: Mittente <io\@host>
To: Destinatario <tu\@altrohost>
Subject: Un oggetto significativo
Il corpo del messaggio va qui dopo una linea vuota.
Puo` essere lungo quante linee desiderate.
EOF
close(SENDMAIL) or warn "sendmail non si e` chiuso correttamente";
L'opzione B<-oi> impedisce a sendmail di intepretare come "fine del
messaggio" una linea contenente un singolo punto. L'opzione B<-t> indica
di usare l'header per decidere a chi va spedito il messaggio, e B<-odq>
indica di mettere il messaggio nella coda. Quest'ultima opzione significa
che il vostro messaggio non sarE<agrave> spedito subito, dunque omettetela
se desiderate una spedizione immediata.
In alternativa, alcune vie meno convenienti includono la chiamata a mail
(a volte denominato mailx) direttamente, o semplicemente l'apertura della
porta 25 al fine di intrattenere una intima conversazione con il server SMTP
remoto, probabilmente sendmail.
Oppure potreste usare il modulo CPAN Mail::Mailer:
use Mail::Mailer;
$mailer = Mail::Mailer->new();
$mailer->open({ From => $indirizzo_mittente,
To => $indirizzo_destinatario,
Subject => $oggetto,
})
or die "Non posso aprire: $!\n";
print $mailer $body;
$mailer->close();
Il modulo Mail::Internet usa Net::SMTP, che E<egrave> meno Unix-centrico di
Mail::Mailer, ma anche meno affidabile. Evitate i comandi SMTP puri. Ci
sono molte ragioni per servirsi di un agente di trasporto della posta
come sendmail. Queste includono le code, i record MX, e la sicurezza.
( run in 1.541 second using v1.01-cache-2.11-cpan-5735350b133 )