Guide Netsons, oggi parliamo di come inviare email con PHP.
Per poter inviare email tramite il linguaggio PHP esistono diversi modi. Tra i principali annoveriamo: l’utilizzo della funzione mail() di PHP o la classe phpmailer integrabili entrambe con l’autenticazione SMTP effettuata sempre tramite le due funzioni appena dichiarate. La nostra trattazione riporterà il caso base di invio di email in formato testo ed autentica SMTP per la prima funzione ed in formato testo ed HTML per la classe phpmailer.
La necessità di inviare email nasce usualmente dal poter mettere a disposizione dei propri utenti un form di contatto o di inviare una notifica legata al verificarsi di determinate condizioni sul sito (es. iscrizione utenti).
Ricordiamo altresi che con l’ utilizzo dei CMS la gran parte dei plugin aggiuntivi designati all’invio prevede già nativamente codice con queste funzionalità.
Funzione mail di PHP:
mail($destinatario, $oggetto, $messaggio)
Quella sopra riportata è la sintassi base. Ad essa può essere aggiunto un quarto elemento per definire gli headers del messaggio email che vogliamo inviare. Quindi la sintassi diventa come la seguente :
mail($destinatario, $oggetto, $messaggio, $headers)
L’ aggiunta degli header permette di abbassare la probabilità che un eventuale server di posta ricevendo le email dal nostro script possano catalogarle come spam perché trovano come mittente il nome del server e non indirizzo email email legato all’ ipotetico servizio.
Vediamo di seguito un esempio di codice utilizzabile:
<?php // definisco mittente e destinatario della mail $nome_mittente = "Mio Nome"; $mail_mittente = "mittente@sito.com"; $mail_destinatario = "destinatario@sito.com"; // definisco il subject ed il body della mail $mail_oggetto = "Messaggio di prova"; $mail_corpo = "Questo è un messaggio di prova per testare la mia applicazione"; // aggiusto delle intestazioni della mail // In questa sezione che deve essere definito il mittente (From) // ed altri eventuali valori come Cc, Bcc, ReplyTo e X-Mailer $mail_headers = "From: " . $nome_mittente . " <" . $mail_mittente . ">\r\n"; $mail_headers .= "Reply-To: " . $mail_mittente . "\r\n"; $mail_headers .= "X-Mailer: PHP/" . phpversion(); if (mail($mail_destinatario, $mail_oggetto, $mail_corpo, $mail_headers)) echo "Messaggio inviato con successo a " . $mail_destinatario; else echo "Errore. Nessun messaggio inviato."; ?>
Fonte: mrebmaster.it
La funzione mail di PHP non supporta nativamente l’ autenticazione SMTP. Sarà necessario nel caso volessimo usare l’ autenticazione SMTP avere a disposizione il pacchetto PEAR Mail installato. Forniremo così allo script le credenziali di una casella email per potersi autenticare.
Di seguito un esempio di codice con autentica SMTP:
<?php require_once "Mail.php"; $mittente = "Mario Rossi <mario.rossi@rossi.it>"; $destinatario = "Tizio Caio <mario.rossi@rossi.it>"; $oggetto = "Salve"; $messaggio = "Salvei,\n\Tutto bene?"; $host = "smtp.tuo_server.ext"; $username = "smtp_username"; $password = "smtp_password"; $headers = array ('From' => $mittente, 'To' => $destinatario, 'Subject' => $oggetto); $smtp = Mail::factory('smtp', array ('host' => $host, 'auth' => true, 'username' => $username, 'password' => $password)); $mail = $smtp->send($destinatario, $headers, $messaggio); if (PEAR::isError($mail)) { echo(" " . $mail->getMessage() . " "); } else { echo(" Messaggio Inviato con successo "); } ?>
Fonte di riferimento => https://www.lifewire.com/send-email-from-php-script-using-smtp-authentication-and-ssl-1171197
Ricordiamo che quando si parla di funzioni PHP è sempre doveroso consultare il sito di riferimento del consorzio produttore di questo potentissimo linguaggio di programmazione http://www.php.net nello specifico cercando per la funzione mail di PHP otteremo questo link http://php.net/manual/en/function.mail.php dove sono presenti numerosi altri esempi.
Classe PHPMailer:
Così come la semplice funzione mail() di PHP, la classe PHPmailer ci permette di inviare email siano esse in formato testo, come visto per la funzione mail siano esse in formato HTML. Il primo step è sicuramente quello di scaricare questo script dopo averlo cercato in rete. Una volta scaricata la cartella dentro il nostro spazio di hosting potremo poi procedere a richiamarlo all’ interno del nostro codice con la funzione “require”.
require "phpmailer/class.phpmailer.php";
Di seguito il codice per l’ invio di una email di testo :
<?php // includiamo la classe PHPMailer require "phpmailer/class.phpmailer.php"; // istanziamo la classe $messaggio = new PHPmailer(); $messaggio->IsSMTP(); $messaggio->Host='Host SMTP'; //definiamo le intestazioni e il corpo del messaggio $messaggio->From='info@mittente.it'; $messaggio->AddAddress('info@destinatario.it'); $messaggio->AddReplyTo('info@mittente.it'); $messaggio->Subject='Prova.'; $messaggio->Body=stripslashes('Ciao!!!!'); //definiamo i comportamenti in caso di invio corretto //o di errore if(!$messaggio->Send()){ echo $messaggio->ErrorInfo; }else{ echo 'Email inviata correttamente!'; } //chiudiamo la connessione $messaggio->SmtpClose(); unset($messaggio); ?>
Fonte di riferimento => http://www.mrwebmaster.it/php/inviare-email-classe-phpmailer_7047_2.html
Le voci sotto riportate fanno riferimento all’ invio tramite autenticazione SMTP, qualora non si intenda utilizzarla vanno commentate o rimosse.
$messaggio->IsSMTP(); $messaggio->Host='Host SMTP'; $messaggio->SmtpClose();
Qualora volessimo inviare in formato HTML andiamo ad inserire i TAG HTML sul testo che vogliamo formattare.
<?php require "phpmailer/class.phpmailer.php"; $messaggio = new PHPmailer(); $messaggio->IsSMTP(); //settiamo su true il metodo che indica alla classe //il formato HTML $messaggio->IsHTML(true); $messaggio->Host='Host SMTP'; //intestazioni e corpo dell'email $messaggio->From='info@mittente.it'; $messaggio->AddAddress('info@destinatario.it'); $messaggio->AddReplyTo('info@mittente.it'); $messaggio->Subject='Prova formato HTML'; //inseriamo i tag HTML e i CSS per formattare il messaggio $messaggio->Body = ''; $messaggio->Body .= '.up{background-color:#FF0000;color:#000000;font-size:12px}'; $messaggio->Body .= '.down{color:#FF0000;text-align:left;font-size:15px}'; $messaggio->Body .= ''; $messaggio->Body .= ''; $messaggio->Body .= '<table><tr><td class="up">Ciao!</td></tr><tr><td class="down">Ciao!</td></tr></table>'; $messaggio->Body .= ''; //parte relativa all'invio if(!$messaggio->Send()){ echo $messaggio->ErrorInfo; }else{ echo 'Email inviata correttamente!'; } $messaggio->SmtpClose(); unset($messaggio); ?>
Fonte: mrwebmaster.it
Ovviamente le possibilità di personalizzazione ed utilizzo sono numerose e vanno eseguite le dovute personalizzazioni in base al proprio hosting e soprattutto alle proprie esigenze.