Inviare la Posta Elettronica con PHP

Una caratteristica interessante di PHP è la possibilità dell’invio della posta elettronica attraverso una semplice funzione:

mail( destinatario, oggetto, messaggio, [header] )

Il significato degli argomenti mi sembra più che ovvio, ma l’ultimo opzionale merita un approfondimento. Questo valore può essere utilizzato per indicare l’indirizzo per le risposte o inviare una E-Mail in formato HTML:

$strHeader = “From: xxxxxx@xxxxxx.xx\n”;
$strHeader .= “X-Mailer: XXXXX\n”;
$strHeader .= “MIME-Version: 1.0\n”;
$strHeader .= “Content-Type: text/html\n\n”;

In questo caso se inviamo il messaggio con il valore $strHeader potremmo inserire nel messaggio anche i tag HTML e formattando in maniera più efficace il testo.
Questa funzione presuppone che sul server su cui gira l’interprete PHP sia presente anche un servizio di smistamento della posta, altrimenti sarà necessario ricorrere a funzioni IMAP (Internet Mail Access Protocol ). Questo protocollo viene supportato da PHP attraverso una lunga serie di funzioni che possono essere utilizzate, con qualche limitazione, per la gestione della posta attraverso il protocollo POP3 ( Post Office Protocol 3 ) e per le news con NNTP ( Network News Transfer Protocol ). Purtroppo tutte queste funzioni sono presenti solo se al momento della compilazione si è inserita l’opzione –with-imap e nel nostro computer è presente un server IMAP.
Esiste un altro sistema che permette di inviare la posta attraverso pagine PHP anche senza avere un server SMTP o IMAP sul server dove è installato l’interprete. Possiamo utilizzare i socket ed inviare la posta attraverso una connessione sulla porta 25 dettando le singole istruzioni SMTP al server che può essere anche remoto. Lato negativo della storia è che è difficile trovare un server che ci lasci smistare la posta in questo modo, comunque vediamo un esempio che ci spiega come fare:

<html>
<head><title>Invio di un messaggio
       con PHP</title></head>

<body>

<?php

$mailhost = "smtp.xxxxx.xx";
$timeout = 5;

$conn = fsockopen($mailhost, 25,
        $err, $err_str, $timeout);
if ($conn)
{
   fputs($conn, "HELO xxxxx\n");
   fgets($conn, 128);

   fputs($conn, "MAIL FROM:
            <xxxxx@xxxxx.xx>\n");
   fgets($conn, 128);

   fputs($conn, "RCPT TO:
            <xxxxx@xxxxx.xx>\n");
   fgets($conn, 128);

   fputs($conn, "DATA\n");
   $x = fgets($conn, 128);

   fputs($conn, "Subject: PHP socket mail!\n");
   fputs($conn, "Questo messaggio ti è stato inviato\n");
   fputs($conn, "da una pagina PHP\n");
   fputs($conn, "\n");
   fputs($conn, "Ciao!\n");
   fputs($conn, ".\n");

   fputs($conn, "QUIT\n");
   fclose($conn);
}
else
{
   echo "Impossibile inviare la posta da
           $mailhost<br>Errore($err):
          $err_str<br>\n";
}

?>

</body>
</html>

In questo semplice esempio abbiamo aperto un canale di comunicazione sulla porta 25 ( di solito la standard per SMTP ), attese le risposte ed inviati i dati secondo il protocollo SMTP di cui abbiamo parlato in questo articolo.
La connessione viene stabilita attraverso la funzione fsockopen() che richiede il nome dell’host a cui collegarsi ed il numero della porta desiderata. Se la nostra connessione non viene accettata scriviamo sulla pagina web il motivo dell’errore. A questo punto possiamo inviare i dati con fputs() e riceverli attraverso fgets(), al termine possiamo chiudere la connessione con fclose(). Le funzioni elencate lavorano in remoto così come quelle che lavorano su file locali e per questo possiamo perfino richiedere una pagina web o richiedere altri servizi sulle rispettive porte del protocollo TCP/IP.

Informazioni su Giampaolo Rossi

Sviluppatore di software gestionale da oltre 28 anni.
Questa voce è stata pubblicata in PHP e contrassegnata con , . Contrassegna il permalink.