'Choix 1', 'n+1'=>'Choix 2', etc.
# la première ligne (optionnelle) impose un choix
# page vers laquelle rediriger le script après envoi réussi
$pageconfirme = "index.html";
# traiter $_GET['mailOK'] dans $pageconfirme (ex. index.php) comme ceci :
# if(isset($_GET['mailOK'])) echo "Votre message a été envoyé";
/*
fin des modifications
*/
$erreur = false;
$message = false;
$focus = 0;
# l'utilisateur a validé le formulaire
if (!empty($_POST)) {
# vérification des champs requis (Nom, Objet, Message, Email ou Tel)
if (empty($_POST['Message'])) {
$erreur = "Merci de renseigner le message";
$focus = 1; // modification couleur du champ de saisie concerné
}
if (empty($_POST['Nom'])) {
$erreur = "Merci de renseigner votre nom";
$focus = 3;
}
# email et tel sont vides : pas glop !
if (empty($_POST['Email']) && empty($_POST['Tel'])) {
$erreur = "Saisir email et/ou téléphone SVP";
$focus = 4;
}
# vérification de l'email non vide
elseif (!empty($_POST['Email'])) {
if(!preg_match('`^[[:alnum:]]([-_.]?[[:alnum:]])*@[[:alnum:]]([-_.]?[[:alnum:]])*\.([a-z]{2,4})$`',$_POST['Email'])) {
$erreur = "Email non conforme";
$_POST['Email'] = "";
$focus = 5;
}
# vérification du téléphone (sans espaces)
} elseif (!is_numeric(str_replace(" ","",$_POST['Tel']))) {
$erreur = "Téléphone non conforme";
$_POST['Tel'] = "";
$focus = 6;
}
# pièce jointe (nouveauté 12.10.2005)
$piecejointe = "";
if(!$erreur && strlen($_FILES['Fichier']['name'])) {
$fichier = $_FILES['Fichier'];
# upload du fichier sur le serveur
$temp = $fichier['tmp_name'];
$name = $fichier['name'];
$size = $fichier['size'];
$destination = $rep.$name;
if($size > $taillemax)
$erreur = "Taille du fichier $name > ".(int)($taillemax/1024)." Ko";
elseif(!@is_uploaded_file($temp))
$erreur = "Téléchargement du fichier $name impossible";
elseif(!@move_uploaded_file($temp, $destination))
$erreur = "Problème de transfert du fichier $name";
if($erreur) $focus = 7;
else {
# lecture du type de fichier
if(!function_exists('mime_content_type')) {
function mime_content_type($fichier) {
# ajouter autant de combinaisons que souhaitées
$mime = array(
'.gif' => 'image/gif',
'.jpg' => 'image/jpeg',
'.psd' => 'image/x-xwd',
'.png' => 'image/png',
'.txt' => 'text/plain',
'.doc' => 'application/msword',
'.xls' => 'application/vnd.ms-excel',
);
# par défaut
if(!$type = $mime[strrchr($fichier,'.')]) $type = "application/octet-stream";
return $type;
}
}
/*
pour utiliser mime_content_type()
éditer le fichier php.ini et enlever le commentaire sur :
extension=php_mime_magic.dll
sous Windows ajouter ces 2 lignes :
mime_magic.debug = On
mime_magic.magicfile = "c:\chemin_du_fichier\magic.mime"
NB : fonction non activée chez OVH
*/
$mimetype = mime_content_type($destination);
# lecture et conversion du fichier
if($openf = @fopen($destination, "rb")) {
$fichier = fread($openf, filesize($destination));
@fclose($openf);
# encodage norme RFC 2045
$piecejointe = chunk_split(base64_encode($fichier));
} else {
$erreur = "Problème de lecture du fichier $name";
$focus = 7;
}
}
}
# pas d'erreur donc on continue
if(!$erreur) {
# traitement du tableau $_POST qui contient les paires name => value
$message_final = "";
foreach($_POST as $key => $value) {
# la boucle passe les champs vides ou non désirés
# pour passer d'autres champs les séparer par |
if (!strlen($value) || eregi("(MAX_FILE_SIZE|Objet)", $key)) continue;
$message_final .= "$key : ".strip_tags($value)."\n";
}
# formatage du message de confirmation affiché (option)
# conversion des sauts de ligne et des caractères spéciaux
$message = ereg_replace("(\n|\r|\r\n)", "
", htmlentities($message_final));
# si $objets est un tableau : Objet = select donc index = $_POST['Objet']
if(is_array($objets))
$objet = "$entete ".$objets[$_POST['Objet']];
# sinon Objet = input donc en français dans le texte !
else
$objet = "$entete ".$_POST['Objet'];
# si l'email n'est pas renseigné on le remplace par celui
# du destinataire, en ajoutant une alerte au message
$final_mail = $_POST['Email'];
if(empty($_POST['Email'])) {
$final_mail = $destinataire;
$message_final .= "\nNe pas répondre par mail : email absent.\n";
}
# en-têtes
$headers = "From: ".$final_mail;
if(strlen($email_cc))
$headers .= "\nCC: ".$email_cc;
if(strlen($email_bcc))
$headers .= "\nBCC: ".$email_bcc;
# hôte expéditeur
$message_final .= "Hôte : ".gethostbyaddr($_SERVER['REMOTE_ADDR']);
# si pièce jointe on ajoute l'en-tête spécifique avec séparateurs
if(strlen($piecejointe)) {
$boundary = "/-------".md5(uniqid(rand()))."-------/"; // séparateur
$headers .= "\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"$boundary\"\n";
$message_final =
"This is a multi-part message in MIME format.\n--$boundary\n".
"Content-Type: text/plain; charset=ISO-8859-1\n".
"Content-Transfer-Encoding: 7bit\n\n".
"$message_final\n\n--$boundary\n".
"Content-Type: $mimetype; name=\"$name\"\n".
"Content-Transfer-Encoding: base64\n".
"Content-Disposition: attachment; filename=\"$name\"\n\n".
"$piecejointe\n--".
$boundary."--\n";
}
# envoi du mail
if (@mail($destinataire, stripslashes($objet), stripslashes($message_final), $headers)) {
@unlink($destination); // suppression de la pièce jointe
@header("Location: ".$pageconfirme."?mailOK=1");
exit;
} else {
$pageName = "Echec !";
$erreur = "Echec de l'envoi ! Merci d'essayer encore";
}
} else {
$pageName = "Erreur de saisie !";
} // if(!$erreur)
} // if ($_POST)
?>