<?php
    define
'MAIL_TO'/* >>>>> */'utilisateur@domaine.tld'/* <<<<< */ );  //ajouter votre courriel
    
define'MAIL_FROM''utilisateur@domaine.tld' ); // valeur par défaut
    
define'MAIL_OBJECT''objet du message' ); // valeur par défaut
    
define'MAIL_MESSAGE''votre message' ); // valeur par défaut

    
$mailSent false// drapeau qui aiguille l'affichage du formulaire OU du récapitulatif
    
$errors = array(); // tableau des erreurs de saisie
    
    
if( filter_has_varINPUT_POST'send' ) ) // le formulaire a été soumis avec le bouton [Envoyer]
    
{
        
$from filter_inputINPUT_POST'from'FILTER_VALIDATE_EMAIL );
        if( 
$from === NULL || $from === MAIL_FROM // si le courriel fourni est vide OU égale à la valeur par défaut
        
{
            
$errors[] = 'Vous devez renseigner votre adresse de courrier &eacute;lectronique.';
        }
        elseif( 
$from === false // si le courriel fourni n'est pas valide
        
{
            
$errors[] = 'L\'adresse de courrier &eacute;lectronique n\'est pas valide.';
            
$from filter_inputINPUT_POST'from'FILTER_SANITIZE_EMAIL );
        }

        
$object filter_inputINPUT_POST'object'FILTER_SANITIZE_STRINGFILTER_FLAG_ENCODE_HIGH FILTER_FLAG_ENCODE_LOW );
        if( 
$object === NULL OR $object === false OR empty( $object ) OR $object === MAIL_OBJECT // si l'objet fourni est vide, invalide ou égale à la valeur par défaut
        
{
            
$errors[] = 'Vous devez renseigner l\'objet.';
        }

        
/*     pas besoin de nettoyer le message. 
        /    http://www.phpsecure.info/v2/article/MailHeadersInject.php
        /    Logiquement, les parties message, To: et Subject: pourraient servir aussi à injecter quelque chose,     mais la fonction mail()
        /    filtre bien les deux dernières, et la première est le message, et à partir du moment où on a sauté une ligne dans l'envoi du mail,
        /    c'est considéré comme du texte; le message ne saurait donc rester qu'un message.*/
        
$message filter_inputINPUT_POST'message'FILTER_UNSAFE_RAW );
        if( 
$message === NULL OR $message === false OR empty( $message ) OR $message === MAIL_MESSAGE // si le message fourni est vide ou égale à la valeur par défaut
        
{
            
$errors[] = 'Vous devez &eacute;crire un message.';
        }

        if( 
count$errors ) === // si il n'y a pas d'erreurs
        
{
            if( 
mailMAIL_TO$object$message"From: $from\nReply-to: $from\n" ) ) // tentative d'envoi du message
            
{
                
$mailSent true;
            }
            else 
// échec de l'envoi
            
{
                
$errors[] = 'Votre message n\'a pas &eacute;t&eacute; envoy&eacute;.';
            }
        }
    }
    else 
// le formulaire est affiché pour la première fois, avec les valeurs par défaut
    
{
        
$from MAIL_FROM;
        
$object MAIL_OBJECT;
        
$message MAIL_MESSAGE;
    }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="fr" xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
    <head>
        <title>Contact</title>
        <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
        <meta http-equiv="content-language" content="fr" />
        <style type="text/css">
html{ font-family:Geneva, Arial, Helvetica, sans-serif; margin:0; padding:0; font-size:.88em;}
body{ width:772px; margin:0 auto; padding:0; }
textarea{ width:772px; }
label{ display:block; font-weight:bold; }
p#welcome{ padding:10px 20px; border:1px dotted #00f; color:#00f; font-weight:bold; }
ul{ padding:10px 20px; border:1px dotted #f00; color:#f00; font-weight:bold; }
p#success{ padding:10px 20px; border:1px dotted #0f0; color:#0f0; font-weight:bold; }
p em{ display:block; font-weight:normal; }
        </style>
    </head>
    <body>
        <h1>Contact</h1>
        <hr />
<?php
    
if( $mailSent === true // si le message a bien été envoyé, on affiche le récapitulatif
    
{
?>
        <p id="success">Votre message a bien &eacute;t&eacute; envoy&eacute;.</p>
        <p><strong>Courriel pour la r&eacute;ponse&nbsp;:</strong><br /><?php echo( $from ); ?></p>
        <p><strong>Objet&nbsp;:</strong><br /><?php echo( $object ); ?></p>
        <p><strong>Message&nbsp;:</strong><br /><?php echo( nl2brhtmlspecialchars$message ) ) ); ?></p>
<?php
    
}
    else 
// le formulaire est affiché pour la première fois ou le formulaire a été soumis mais contenait des erreurs
    
{
        if( 
count$errors ) !== )
        {
            echo( 
"\t\t<ul>\n" );
            foreach( 
$errors as $error )
            {
                echo( 
"\t\t\t<li>$error</li>\n" );
            }
            echo( 
"\t\t</ul>\n" );
        }
        else
        {
            echo( 
"\t\t<p id=\"welcome\"><em>Tous les champs sont obligatoires</em></p>\n" );
        }
?>
        <form id='contact' method="post" action="<?php echo( $_SERVER['REQUEST_URI'] ); ?>">
            <p>
                <label for="from">Courriel pour la r&eacute;ponse</label>
                <input type="text" name="from" id="from" value="<?php echo( $from ); ?>" />
            </p>
            <p>
                <label for="object">Objet</label>
                <input type="text" name="object" id="object" value="<?php echo( $object ); ?>" />
            </p> 
            <p>
                <label for="message">Message</label>
                <textarea name="message" id="message" rows="20" cols="80"><?php echo( $message ); ?></textarea>
            </p>
            <p>
                <input type="reset" name="reset" value="Effacer" />
                <input type="submit" name="send" value="Envoyer" />
            </p>
        </form>
<?php
    
}
?>
    </body>
</html>