Un’applicazione molto semplice per prendere confidenza con il PHP e le sue potenzialità. Proviamo ad inviare una mail, compilando una form con i dati necessari classici.
La form è realizzata con Bootstrap ma ovviamente il lettore può semplificare la sintassi html/css con elementi standard. Se utilizzate un sistema locale basato su Wampp per gestire Apache e i vari supporti software, vi occorrerà un server web, magari fantoccio per simulare soltanto l’invio delle mail. Un esempio valido e semplice, che richiede solo la Java SDK e senza istallazione è qui https://github.com/gessnerfl/fake-smtp-server con l’accortezza di modifica il file php.ini dove va sostituita la voce smtp_port = 5025
Il codice della pagina HTML. Potete chiamare il file form.php
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>FORM EMAIL</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
</head>
<body>
<div class="container bg-light col-lg-7 col-md-12 m-auto p-5">
<H1 class="text-primary text-center">Maschera Invio Email</H1>
<br/><p class="fs-4">In questo form abbiamo utilizzato css Bootstrap con i tag del Form spiegati in questa pagina: <a href="https://getbootstrap.com/docs/5.1/forms/overview/" target="blank">https://getbootstrap.com/docs/5.1/forms/overview/</a></p>
<form name="form1" action="invia_email.php" method="POST">
<label class="text-info">Email del Destinatario</label><br/>
<input type="email" name="email" class="form-control " required size="30" maxlength="50">
<br/>
<label class="text-info">Oggetto del messaggio</label><br/>
<input type="text" name="oggetto" class="form-control " required size="50" maxlength="100">
<br/>
<label class="text-info">Contenuto del messaggio</label><br/>
<textarea required rows="10" class="form-control" name="contenuto" cols="80" maxlength="800" >
</textarea>
<br/>
<input type="submit" class="btn btn-primary" data-toggle="tooltip" data-placement="top" title="Conferma Invio" value="INVIA EMAIL">
<input type="reset" class="btn btn-secondary" value="Cancella">
</form>
</div>
<!-- librerie js bootstrap -->
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.10.2/dist/umd/popper.min.js" integrity="sha384-7+zCNj/IqJ95wo16oMtfsKbZ9ccEh31eOz1HGyDuCQ6wgnyJNSYdrPa03rtR1zdB" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js" integrity="sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13" crossorigin="anonymous"></script>
</body>
</html>

Il listato invece del codice PHP col file invio_mail.php
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>INVIO EMAIL</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
</head>
</head>
<body>
<div class="container col-8 m-auto p-5">
<?php
// --- leggo le informazioni sul POST ----
$email = $_POST['email'];
$oggetto= $_POST['oggetto'];
$contenuto=$_POST['contenuto'];
$mittente="miaemail@gmail.com"; // inserire qui l'email del mittente
$mittente="From: alfredo.centinaro@gmail.com"; // inserire qui l'email del mittente
if(mail($email, $oggetto, $contenuto, $mittente))
{
echo "<h2 class='text-primary'>Email inviata correttamente a: $email</h2>";
}
else
{
echo "Errore invio email!!!";
}
?>
</div>
<!-- librerie js bootstrap -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
</body>
</html>
Il risultato sul nostro server di posta fasullo. Guardate bene il campo From in alto con admin@wampserver.invalid che può essere cambiato sempre sul file php.ini. Ogni volta si modifica il file php.ini. ricordate di resettare il server apache.

Qui non abbiamo previsto forme e misure di sicurezza, caratteristica fondamentale quando abbiamo elementi di input. Non vogliamo approfondire molto il tema in questo post ma un primo approccio di sicurezza semplice è quello di filtrare i caratteri speciali sostituendo le righe del prelievo $_POST con l’aggiunta della funzione htmlspecialchars() che filtra preliminarmente i dati inseriti.
$email = htmlspecialchars($_POST['email']);
$oggetto= htmlspecialchars($_POST['oggetto']);
$contenuto=htmlspecialchars($_POST['contenuto']);
Ultima modifica 27 Febbraio 2022