2 commenti php

Php consente di inviare una email dal proprio server grazie ad un'unica funzione: mail().

I suoi principali utilizzi sono i seguenti:

  • contact form: consentire agli utenti di inviarci una email direattamente dal nostro sito;
  • newsletters: spedire periodicamente (in maniera automatizzata o manuale) email ai nostri utenti che si sono registrati alla newsletters;
  • notifiche: ricevere o inviare notifiche legate a determinati eventi verificatisi nel sito.

 

Essa accetta 4 parametri di cui i primi tre sono obbligatori, mentre il quarto è opzionale:

  1. il primo parametro è l'indirizzo email (o gli indirizzi email separati dalla virgola) di destinazione;
  2. il secondo è l'oggetto della email;
  3. il terzo è il testo della email;
  4. il quarto sono le intestazione (gli headers) che risultano necessarie per inviare alcuni dati supplementari (ad esempio: mail in formato html, il set di caratteri, etc etc.).

 

Restituisce un valore boleano (TRUE/FALSE), TRUE se l'email è inviata con successo. In caso di mancato invio la funzione restituisce un errore di tipo warning.


Il meccanismo di funzionamento della funzione mail() nella sua versione base si presenta estremamente semplice. Vediamo quindi come si presenta un semplice script:

<?php
//settiamo alcune variabili:
$destinatario = 'tuoindirizzo@email.it'; 
$oggetto = 'email dal tuo sito';
 
// se il form è stato inviato
if(isset($_POST['submit']))
   {
   // verifichiamo che i campi inviati non siano vuoti
   if(trim($_POST['nome'])=='' or trim($_POST['messaggio'])=='')
      {
      echo 'I campi nome e messaggio sono obbligatori';
      }
   // altrimenti
   else
      {
      // scriviamo il testo della mail
      $testo = 'Nome: '.strip_tags(trim(stripslashes($_POST['nome']))).'\r\n';
      $testo .= 'Messaggio: '.strip_tags(trim(stripslashes($_POST['messaggio'])));

      // inviamo la mail verificandone il successo
      if( !@mail($destinatario, $oggetto, $testo) )
         {
         echo "Problemi nell'invio della mail";	
         }
      else
         {
         echo 'Email inviata correttamente';
         }
      }
   }
?>
<form action="" method="post">
   <p>Nome:</p>
   <input type="text" name="nome">
   <p>Messaggio:</p>
   <textarea name="messaggio"></textarea>
   <input type="submit" name="submit" value="invia">
</form>

 

Da notare le funzioni utilizzate per filtrare le stringhe in ingresso operata con:

<?php
$stringa = strip_tags(trim(stripslashes($_POST['nome'])));
?>

 

A questo punto vediamo i possibili utilizzi del quarto parametro cioè gli headers. I più importanti sono i seguenti:

  • 'From: mittente<mittente@email.it>': indicazione del mittente; 
  • 'Reply-to: indirizzo@email.it': indicazione dell'indirizzo a cui inviare le risposte;
  • 'Content-Type: text/html': tipologia di contenuto (come da esempio questo deve essere impostato in caso di invio di una mail in formato HTML);
  • 'Charset=iso-8859-1': set di caratteri impiegato; 

 

Poniamo, ad esempio di voler inviare una mail in formato html

Dovremmo impostare necessariamente gli headers affinchè l'html possa essere intepretato in fase di lettura. Questi saranno:

<?php
$header = "MIME-Version: 1.0rn";
$header .= "Content-type: text/html; charset=iso-8859-1rn";
?>

 

Per impostare il mittente della mail e l'indirizzo a cui rispondere avremo invece:

<?php
$header = 'From: "sito.it" <indirizzo@email.it> rn';
$header .= "Reply-To: rispondi@email.it rn";
?>

 

Vorrei concludere l'analisi facendo alcune riflessioni e raccomandazioni in relazione alla sicurezza, all'affidabilità e alle funzionalità ulteriori per l'invio di una email dai nostri siti web:

  1. è da evitare, quando possibile, l'impostazione del destinatario della email fatta attraverso il form: ciò darebbe la possibilità agli utenti di inviare email di spam in cui il mittente effettivo sarà il nostro sito!
  2. le stringhe in entrata dello script dovrebbero essere filtrate idoneamente per evitare il fenomeno detto degli 'headers injection' che sirealizza atteaverso l'inserimento di particolari stringhe da parte dell'utente in cui si vanno ad impostare headers potenzialmente pericolosi all'interno delle mail;
  3. le email inviati con tale funzione posso essere indirizzate nella cartela posta indesiderata di uno o più provider di posta elettronica; alle volte è risolvibile impostando opportuni headers ma non vi è una soluzione che priva di garanzie;
  4. la funzione mail() fornisce la possibilità di inviare allegati tramite l'impostazione di particolari headers.

 

Per risolvere in tutto o in parte le problematiche sopra esposte conviene utilizzare una delle classi maggiormente diffuse fra le quali possiamo citare Phpmailer e Swiftmail.

 

Vai alla lezione successiva

Vai alla lezione precedente

Olimpio Romanella

Sono un appassionato di Web Developing con un particolare debole per php. Mi dedico principalmente dello sviluppo back-end ed in particolare programmazione lato server con php, sviluppo di database relazionali MySql e progettazione di CMS di piccole e medie dimensioni.

Mi avvalgo del framework javascript Jquery, utilizzando molti dei suoi plugin e nei dei miei progetti utilizzo spesso il framework MVC Codeigniter.

2 Commenti presenti

avatar must

must

16 April 2014 ore 10:51

ehm, altra correzione. (:
'\r\n' nella concatenazione da assegnare alla variabile $testo va messo tra doppi apici, essendo composto da caratteri speciali. Quindi "\r\n".

Perdonami per queste mini-correzioni ma è che avendoci speso del tempo anche io a capire quale fosse il problema ho piacere a cercare di dare una mano a migliorare questa guida, che ritengo sia davvero molto valida e ben strutturata.
grazie davvero!

avatar Luca

Luca

08 February 2013 ore 16:51

ragazzi siete molto bravi , mi aiutate con questi form per inserirli sul mio sito, mi aiutate?