Questa libreria fornisce un approccio orientato agli oggetti per l'invio di e-mail in PHP.
Questo script è distribuito sotto licenza GPL
NON C'E' NESSUNA GARANZIA PER IL PROGRAMMA, PER QUANTO CONSENTITO DALLE VIGENTI NORMATIVE.
ECCETTO QUANDO ALTRIMENTI STABILITO PER ISCRITTO, I DETENTORI DEL COPYRIGHT E/O LE ALTRE
PARTI FORNISCONO IL PROGRAMMA "COSI' COME È" SENZA GARANZIA DI ALCUN TIPO,
NE' ESPRESSA NE' IMPLICITA, INCLUSE, MA NON LIMITATE A, LE GARANZIE DI COMMERCIABILITA'
O DI UTILIZZABILITA' PER UN PARTICOLARE SCOPO. L'INTERO RISCHIO CONCERNENTE LA QUALITA'
E LE PRESTAZIONI DEL PROGRAMMA E' DEL LICENZIATARIO. SE IL PROGRAMMA DOVESSE RISULTARE
DIFETTOSO, IL LICENZIATARIO SI ASSUME I COSTI DI MANUTENZIONE, RIPARAZIONE O CORREZIONE.
Questo script è un fork di libMail, scritto originariamente da
Leo West. Il codice su cui è
basato è quello della versione 1.4.1 rilasciata da
Setec Astronomy. Le principali
funzionalità aggiunte in libMail2008 sono il supporto per le e-mail
multipart/alternative (HTML con testo alternativo per i client senza
supporto HTML) e multipart/related (HTML con immagini incluse nel
messaggio stesso).
Script originale di Leo West - west_leo@yahoo.com
URL: http://lwest.free.fr/doc/php/lib/Mail/
Ultima modifica : Nov 2001
Versione : 1.3
Modificato da Setec Astronomy - setec@freemail.it
URL : http://digilander.iol.it/setecastronomy/
Ultima modifica : Gen 2004
Versione : 1.4.1
Modificato da Pier Luigi Pau - pigipau@gmail.com
URL : http://eregil.altervista.org/
Ultima modifica : Gen 2013
Versione : 1.7.0
Alcune delle funzionalità di libMail2008:
versione 1.7.0
versione 1.6.2
A partire da questa release, solo la versione per PHP 5 è mantenuta. Gli utenti di PHP 4 devono continuare ad usare la versione 1.6.1 o una precedente.
versione 1.6.1
Release di manutenzione.
versione 1.6.0
Introdotto il supporto per messaggi in multipart/related. È ora possibile allegare le immagini utilizzate nel corpo del messaggio in HTML, e quindi evitare di referenziare immagini sul web.
versione 1.5.0
Questa versione è rilasciata contemporaneamente alla 1.4.2; mentre la 1.4.2 cerca di essere un perfetto sostituto della 1.4.1 (l'interfaccia della classe non cambia in maniera radicale), questa versione aggiunge delle funzionalità non banali, in particolare il supporto per le e-mail in formato MIME multipart/alternative. Di conseguenza, il modo per inviare e-mail in HTML è cambiato e gli script che utilizzano questa classe a tale scopo dovranno essere modificati.
versione 1.4.2
Questa versione cerca di essere un sostituto perfetto della 1.4.1, ma in ogni caso, si raccomanda caldamente di testarla in maniera approfondita, prima di sostituire il vostro libmail.php su un server di produzione.
versione 1.4.1
versione 1.4
versione 1.3
versione 1.2
versione 1.1
include "libmail.php"; $m= new Mail; // crea l'oggetto mail $m->From ("leo@isp.com"); $m->To ("destination@somewhere.fr"); $m->Subject ("oggetto dell'e-mail"); $m->Body ("Hello\nThis is a test of the Mail component"); // corpo del messaggio $m->Cc ("someone@somewhere.fr"); $m->Bcc ("someoneelse@somewhere.fr"); $m->Priority (4) ; // bassa priorità $m->Attach ("/home/leo/toto.gif", "image/gif", "inline") ; // allega un file di tipo image/gif da visualizzare nel messaggio $m->Send (); // invia l'e-mail echo "Mail was sent:<br><pre>", $m->Get (), "</pre>";
Scarica libmail.zip dall'URL nella sezione Autori.
Contenuto:
(*) Nota: più versioni di libMail possono essere distributite in un unico archivio. Sebbene più versioni dello script possano essere distribuiti insieme, ciascuna versione deve comunque essere considerata come uno script distinto, che può essere utilizzato, alterato e ridistribuito nel rispetto dei termini della licenza GPL.
Non è necessaria alcuna configurazione particolare nella libreria. In php.ini:
SMTP = smtp.isp.com ; for win32 only sendmail_from = valid_address@chezmoi.fr ;for win32 only
Crea un'istanza di Mail.
$mail = new Mail ();
Definisce l'oggetto dell'e-mail.
$mail->Subject ("Hello world!");
Definisce il mittente dell'e-mail. Questa chiamata è obbligatoria. È possibile specificare anche il nome.
$mail->From( "me@isp.com" ); $mail->From( "me@isp.com", "Me at ISP" );
Definisce il destinatario o i destinatari. Questa chiamata è obbligatoria. Il parametro può essere un indirizzo (stringa) o un array di indirizzi. È possibile specificare anche i nomi.
$mail->To ("you@isp.com");
$tos = array ("you@isp.com", "u2@isp.com"); $mail->To ($tos);
$tos = array ("you@isp.com" => "You at ISP", "u2@isp.com" => "U2 at ISP"); // DEPRECATO A PARTIRE DALLA 1.4.2 $mail->To ($tos);
$tos = array ("You at ISP <you@isp.com>", "U2 at ISP <u2@isp.com>"); $mail->To ($tos);
Definisce uno o più destinatari in Carbon-copy (Copia per Conoscenza). Il parametro può essere un indirizzo (stringa) o un array di indirizzi. È possibile specificare anche i nomi.
$mail->CC ("you@isp.com");
$ccs = array ("you@isp.com", "u2@isp.com"); $mail->CC ($ccs);
$ccs = array ("you@isp.com" => "You at ISP", "u2@isp.com" => "U2 at ISP"); // DEPRECATO A PARTIRE DALLA 1.4.2 $mail->CC ($ccs);
$ccs = array ("You at ISP <you@isp.com>", "U2 at ISP <u2@isp.com>"); $mail->CC ($ccs);
Definisce uno o più destinatari in Blind Carbon-copy (Copia per Conoscenza Nascosta). Il parametro può essere un indirizzo (stringa) o un array di indirizzi. È possibile specificare anche i nomi.
$mail->BCC ("you@isp.com");
$bccs = array ("you@isp.com", "u2@isp.com"); $mail->BCC ($bccs);
$bccs = array ("you@isp.com" => "You at ISP", "u2@isp.com" => "U2 at ISP"); // DEPRECATO A PARTIRE DALLA 1.4.2 $mail->BCC ($bccs);
$bccs = array ("You at ISP <you@isp.com>", "U2 at ISP <u2@isp.com>"); $mail->BCC ($bccs);
Definisce il corpo del messaggio in formato testo. Il parametro opzionale charset definisce il set di caratteri utilizzato. Il valore di default è "us-ascii". Il set di caratteri deve corrispondere a quello utilizzato nel corpo del messaggio sia in formato testo che in HTML. Solitamente sarà iso-8859-1 se sono presenti caratteri come le lettere accentate.
$mail->Body ("Message in english"); $mail->Body ("Message avé dé accents", "iso-8859-1");Nota: non inviare e-mail in HTML in questo modo. Vedere i Suggerimenti al riguardo.
Alias di Body(). Disponibile a partire dalla versione 1.5.0
Definisce il corpo del messaggio in formato HTML. Vedere i Suggerimenti
per gli esempi.
Il parametro opzionale charset funziona come nel metodo Body().
Notare che viene utilizzato soltanto l'ultimo charset specificato, fra tutte le chiamate a
Body(), Text(), Html() e SetCharset() che vengono eseguite; non è possibile
utilizzare set di caratteri diversi per testo e HTML.
Il metodo Html() è disponibile a partire dalla versione 1.5.0
Definisce il set di caratteri del messaggio. Può essere chiamato esplicitamente,
invece di specificare il charset in uno dei metodi sopra descritti. Vedere Body() e Html().
Disponibile a partire dalla versione 1.5.0
$mail->SetCharset ("iso-8859-1");
Allega un file $filepath all'e-mail.
$mail->Attach ("logo.gif", "image/gif");
$mail->Attach ("C:\\My Documents\\resume.doc", "application/x-msword", "attachment");
$mail->Attach ("C:\\My Documents\\resume.doc", "application/x-msword", "attachment", "cv.doc");
Crea un file che abbia come contenuto la stringa $content e lo allega all'e-mail (il file non sarà memorizzato automaticamente sul disco!). Disponibile a partire dalla versione 1.4.2
$some_content = "A text file containing this string will be created and attached.\n"; $mail->AttachString($some_content, "text/plain", "attachment", "some_text.txt");
Allega un file $filepath all'e-mail per essere utilizzato come immagine nel corpo in HTML. Restituisce un content-id da utilizzare in un URI dello pseudo-protocollo cid: come attributo src del tag <img> (vedi esempio d'uso nel seguito).
N.B. gli allegati "related" sono ignorati se non viene impostato un corpo in HTML tramite il metodo Html(). La chiamata al metodo Html() dovrebbe avvenire dopo aver chiamato i metodi Relate() e RelateString() per ciascuna immagine che si desidera utilizzare nel corpo dell'e-mail.
Questo metodo è disponibile a partire dalla versione 1.6.0
$mycontentid = $mail->Relate ("logo.gif", "image/gif");
$mail->Html ("...some HTML... <img src=\"cid:$mycontentid\" alt=\"text\"> ...some HTML...");
Crea un file che abbia come contenuto la stringa $content e lo allega all'e-mail (il file non sarà memorizzato automaticamente sul disco!), per essere utilizzato come immagine nel corpo in HTML. Vedi Relate per maggiori dettagli sugli allegati "related".
RelateString dovrebbe essere utilizzato al posto di Relate se un'immagine deve essere generata dinamicamente con le librerie GD. Il modo corretto di memorizzare un'immagine in una variabile per l'utilizzo con RelateString è il seguente:
Vedere anche l'esempio nel seguito.
Questo metodo è disponibile a partire dalla versione 1.6.0
$im = @imagecreatetruecolor(160, 120) or die("Cannot Initialize new GD image stream"); (...some image editing with GD functions...) ob_start(); imagepng($im); $imagevariable = ob_get_contents(); ob_end_clean(); $cid = $mail->RelateString($imagevariable, "image/png", "image.png"); $imagevariable = null;
Definisce il campo header Organization field. Opzionale.
$mail->Organization ("My company");
Definisce un indirizzo "Reply To" (Rispondi a) differente da quello del mittente. È possibile specificare anche un nome.
Definisce un indirizzo "Return Path" differente da quello del mittente. È possibile specificare anche un nome.
$mail->ReturnPath ("answer@mycompany.com");
$mail->ReturnPath ("answer@mycompany.com", "My Company Support");
Definisce la priorità del messaggio. Opzionale.
La priorità deve essere un intero compreso tra 1 (massima) e 5 (minima). Questo valore è solitamente utilizzato dai client per evidenziare i messaggi marcati come urgenti.
$mail->Priority (1); // urgente $mail->Priority (3); // normale $mail->Priority (5); // priorità minima $mail->Priority (1, Mail::priority_full); // urgente, imposta tutti gli header
Il parametro priority_type è stato aggiunto nella versione 1.7.0. Il suo utilizzo è analogo a quello del parametro di UsePriority(). Fare riferimento alla documentazione di UsePriority(). Il valore di default è Mail::priority_xpr.
Definisce quali header saranno usati per impostare la priorità dell'e-mail. Opzionale.
Il parametro priority_type dovrebbe essere impostato a una delle seguenti costanti, le quali corrispondono all'utilizzo di uno o più header di priorità.
Notare che X-MSMail-Priority e Importance non fanno distinzione tra i valori di priorità 1 e 2 (più alta del normale), o tra i valori 4 and 5 (più bassa del normale).
È possibile combinare singoli header usando l'operatore bitwise-or. Per esempio, la seguente espressione corrisponde all'utilizzo di X-Priority e X-MSMail-Priority:
Mail::priority_xpr | Mail::priority_msm
Esempi d'uso:
$mail->UsePriority (Mail::priority_xpr); // usa solo X-Priority $mail->UsePriority (Mail::priority_full); // usa tutti gli header $mail->UsePriority (Mail::priority_xpr | Mail::priority_msm); // use X-Priority e X-MSMail-Priority
Per i casi più comuni si raccomanda l'uso di Mail::priority_xpr (solo X-Priority) o di Mail::priority_full (tutti gli header).
Questo metodo è disponibile a partire dalla versione 1.7.0
Aggiunge una richiesta di ricevuta all'e-mail. La ricevuta viene inviata dal destinatario
quando apre l'e-mail, se il suo client supporta questa funzionalità. La ricevuta
è inviata all'indirizzo definito come mittente (From), a meno che non sia definito
un indirizzo di risposta (ReplyTo) differente.
Il parametro flag è disponibile a partire dalla versione 1.5.0;
il default è true. Se impostato a false, annulla l'eventuale richiesta di ricevuta
impostata con le chiamate precedenti di Receipt().
$mail->Receipt (); $mail->Receipt (false); // ho cambiato idea (1.5.0 e superiori)Attenzione: le ricevute non fanno parte dello standard, perciò possono non essere supportate dai client e-mail.
Questo metodo è usato per impostare gli X-Headers secondo le informazioni presenti nell'array $_SERVER. Vengono aggiunti l'indirizzo IP del client, il server proxy e lo user agent come X-HTTP-Posting-Host, X-HTTP-Proxy-Server and X-HTTP-Posting-UserAgent, rispettivamente.
Questi X-Headers potrebbero tornare utili se l'e-mail è per il webmaster e questi desidera ricevere queste informazioni per qualsiasi ragione.
Se usato in un contesto dove è presente l'array superglobal $_SERVER, questo metodo dovrebbe essere chiamato senza argomenti:
$mail->AntiSpaming ();
In caso contrario, è possibile impostare manualmente i valori passando delle stringhe come argomenti. Usando false (o un argomento di tipo diverso da una stringa) si reimposta il rispettivo X-Header.
Attenzione:
Se utilizzate libmail2008 nei vostri script, siete vivamente incoraggiati
a non utilizzare questa funzionalità per scopi diversi da ciò
per cui è stata progettata.
In particolare, i visitatori di un
sito web non dovrebbero avere il controllo su questi campi X-Header.
Per questa ragione, assicuratevi di non passare a questo metodo
parametri che provengano dall'input dell'utente, ad esempio da $_GET o $_POST.
Se ricevete e-mail contenenti questi X-Header, tenete presente che, similmente a quanto accade con il campo From, essi possono essere fasulli, e pertanto non rappresentano una prova della reale provenienza dell'e-mail.
Invia l'e-mail. Non dimenticate di chiamare questo metodo. :)
$mail->Send ();
Restituisce l'intera e-mail (header + corpo + allegati) in formato "raw". Utile per visualizzare l'e-mail o salvarla come testo o in un database.
Nelle versioni 1.4.2 e precedenti, il parametro full_headers non è disponibile; gli header Subject e To non sono inclusi nel valore di ritorno.
Nelle versioni 1.5.0 e successive, il parametro full_headers determina
se gli header Subject e To debbano essere inclusi nel valore di ritorno.
true: Subject e To sono inclusi (default).
false: Subject e To non sono inclusi (comportamento come le versioni 1.4.x).
In altre parole, a partire dalla versione 1.5.0, gli header Subject e To sono inclusi nel valore di ritorno, ma è possibile chiamare Get(false) per forzare il comportamento che si aveva nelle versioni 1.4.x.
$msg = $mail->Get ();
// mostra il messaggio nella pagina echo "Messaggio inviato:<br><pre>", nl2br( $msg ) , "</pre>";
// salva in un database $msg = str_replace ("'", "''", $msg); $bdd->exec ("insert into Mailbox( user, folder, message, senttime ) values ( 'toto', 'Sent', '$msg', $FCT_CURRENT_TIME");
N.B. alcuni utenti non gradiscono ricevere e-mail in formato HTML.
Per inviare e-mail in HTML mail con libMail 1.4.x e precedenti, è necessario allegare il sorgente HTML come file:
$file = "mail.html"; $mail->Body ("Questa e-mail e' in HTML - che triste"); // inline significa che il client e-mail cercherà di visualizzare l'HTML nel messaggio $mail->Attach ($file, "text/html", "inline");
Con libMail 1.4.2, non è necessario salvare l'HTML come file; è possibile fare ricorso al nuovo metodo AttachString:
$html_content = "<html>...</html>"; $mail->Body ("Questa e-mail e' in HTML - che triste"); $mail->AttachString ($html_content, "text/html", "inline");
Un bug in libMail 1.4.1 e precedenti permetteva anche di inviare e-mail in HTML in questo modo:
$html_content = "<html>...</html>"; $mail->Body ($html_content); $mail->Attach ("noattach"); // o qualsiasi file non esistente
In questo modo si generava una e-mail malformata, che alcuni client
e webmail erano comunque in grado di visualizzare "correttamente",
mentre altri client non vi riuscivano.
Poiché la versione 1.4.2 cerca di replicare il funzionamento della 1.4.1,
nel codice è stato inserito un kludge (un artifizio) che fa in modo che
questa funzionalità scorretta sia mantenuta, a patto che il corpo del messaggio
inizi con un tag <html> (oppure <! o <?). Questo kludge è rimosso
nella versione 1.5.0. Non si dovrebbe comunque usare questo metodo per inviare
e-mail in HTML, dal momento che alcuni utenti non saranno in grado di visualizzarle
correttamente, pur possedendo un client con supporto HTML.
A partire da libMail 1.5.0, i modi descritti sopra sono tutti deprecati (inclusi quelli "buoni") in favore del nuovo metodo Html(); il contenuto HTML dovrebbe inoltre essere accompagnato da un'alternativa di puro testo:
$text_content = "Hello, world!\n"; $html_content = "<html><body><p>Hello, world!</p></body></html>"; $mail->Body ($text_content); $mail->Html ($html_content);
In questo modo si genera un'e-mail in multipart/alternative che include le due versioni del contenuto. Sebbene sia possibile usare Html() da solo, senza impostare un'alternativa di puro testo con Body(), cioò non è consigliato. Inoltre, non si deve usare Body() per il contenuto in HTML.
Se la vostra pagina HTML contiene immagini o link non dimenticate di adottare una delle seguenti soluzioni:
<head> <base href="http://chez.moi.com/"> </head>
Name | libmail2008 |
Lang | php5 |
Version | 1.7.0 |
Lastmod | Mon Jan 21 14:04 GMT 2013 |
Authors | Leo West, Setec Astronomy, Pier Luigi Pau |