Inviare una mail con PHP

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>
Come viene la nostra pagina con la form

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.

La schermata del serve dummy in Java Fake SMTP Server

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