Aide - Recherche - Membres - Calendrier
Version complète : Formulaire MAIL + PJ à améliorer
Forum Développeur - Administration serveur, programmation et base de données > Programmation > PHP
arnatan
Salut je suis un grand débutant en php.

J'ai un formulaire mail php avec envoi de pièce jointe.

Tout fonctionne parfaitement. J'aimerais y apporter un amélioration :

Je souhaites que lorsque sur chaque option choisi en objet, le mail soit envoyé à une personne différente à chaque choix

(RECRUTEMENT METROLOGIE: adressemail1@blabla.com ; RECRUTEMENT USINAGE: adressemail2@blabla.com ; etc... )

Le lien de la page est >>ICI<<


et le code est le suivant :


PHP

<?php
error_reporting (E_ERROR | E_WARNING | E_PARSE);
/*
Envoi de formulaire sans javascript avec pièce jointe proposé par Pierre Pesty http://dev.ppan.net/

Variables A MODIFIER selon vos besoins :
*/
# remplacez login@fai par votre email
$destinataire = "maurice.herblin@mesure-metrologie.com";
# nom et titre de page
$pageName = "Formulaire de contact";
# en-tête de l'objet du mail (option: vide)
$entete = "[SITE.MESURE.RECRUTEMENT]";
# envoi en copie carbone (option: vide)
$email_cc = "";
# envoi en copie cachée (option: vide)
$email_bcc = "";
# emplacement de la feuille de styles
$cssform = "webdev_form.css";
# nom du répertoire pour upload des pièces jointes
# le répertoire (ici "upload") doit être créé sur le serveur
$rep = "upload/"; // ne pas oublier le slash /
# taille max de la pièce jointe (multiple de 1024)
$taillemax = 512000;
# menu déroulant pour l'objet (option: vide)
# ajout d'option : 'n'=>'Choix 1', 'n+1'=>'Choix 2', etc.
# la première ligne (optionnelle) impose un choix
$objets = array(
0 => 'Choisissez',
1 => 'RECRUTEMENT METROLOGIE',
2 => 'RECRUTEMENT BUREAU D ETUDE',
3 => 'RECRUTEMENT USINAGE',
4 => 'AUTRES',
);
# page vers laquelle rediriger le script après envoi réussi
$pageconfirme = "http://www.mesure-metrologie.fr/new_site/merci_recrutement.php";
# 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['Objet'])) {
$erreur = "Merci de renseigner l'objet";
$focus = 2;
}
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)", "<br>", 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)
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title><? echo $pageName?></title>
<meta name="author" content="Pierre Pesty">
<meta name="generator" content="http://dev.ppan.net/">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="<? echo $cssform?>" type="text/css" rel="stylesheet">
<style type="text/css">
<!--
body {
background-image: url(http://www.mesure-metrologie.fr/new_site/img/fond/fond_milieu_ok.gif);
}
.Style1 {color: #0b2a59}
.Style2 {color: #FFFFFF}
-->
</style></head>
<body>
<div>
<? if (!$erreur) { ?>
<table width="400" border="0" cellspacing="0" cellpadding="8">
<tr>
<td bgcolor="#0b2a59"><span class="Style2"><strong>RECRUTEMENT MESURE </strong><br>
Envoyez-nous vos CV et lettre de motivation </span></td>
</tr>
</table>
<h4 class="Style1"> </h4>
<p>Merci de renseigner tous les champs</p>
<? } else { ?>
<p class="alerte"><? echo $erreur?></p>
<? } ?>
<hr>
<form name="formulaire" action="<? echo $_SERVER['contact_pj/PHP_SELF']?>" method="post" enctype="multipart/form-data">
<p>
<label for="nom">Nom</label><input id="nom" <? if($focus == 3) echo "class=\"focus\"";?> name="Nom" maxlength="30" value="<? echo htmlentities($_POST['Nom'], ENT_QUOTES)?>">
</p>
<p>
<label for="email">Email</label><input id="email" <? if($focus == 5 || $focus == 4) echo "class=\"focus\"";?> name="Email" maxlength="60" value="<? echo htmlentities($_POST['Email'], ENT_QUOTES)?>">
</p>
<p>
<label for="tel">Téléphone</label><input id="tel" <? if($focus == 6 || $focus == 4) echo "class=\"focus\"";?> name="Tel" maxlength="20" value="<? echo htmlentities($_POST['Tel'])?>">
</p>
<p>
<? if (is_array($objets)) { ?>
<label for="objet">Objet</label><select name='Objet' <? if($focus == 2) echo "class=\"focus\"";?> id="objet">
<?
foreach($objets as $key => $val) {
echo " <option value='$key'";
// vérifier si une des entrées a été choisie
if($key == $_POST['Objet']) echo " selected";
echo ">$val\n";
}
?>
</select>
<? } else { ?>
<label for="objet">Objet</label><input id="objet" <? if($focus == 2) echo "class=\"focus\"";?> name="Objet" maxlength="60" value="<? echo htmlentities($_POST['Objet'], ENT_QUOTES)?>">
<? } ?>
</p>
<p>
<label for="message">Lettre de motivation</label><textarea <? if($focus == 1) echo "class=\"focus\"";?> id="message" name="Message"><? echo htmlentities(stripslashes($_POST['Message']))?></textarea>
</p>
<? if (file_exists($rep)) { ?>
<p>
<label for="fichier">Votre C.V.</label>
<input type="hidden" name="MAX_FILE_SIZE" value="<? echo $taillemax?>"><input type="file" id="fichier" <? if($focus == 7) echo "class=\"focus\"";?> name="Fichier" size="35">
</p>
<p>
<label> </label>NB : taille du fichier inférieure à <?= (int)($taillemax/1024)?> Ko
</p>
<? } ?>
<p>
<label> </label><input id="submit" type="submit" value="Envoyer"> <a href="contact_pj/."></a> </p>
</form>
</div>
</body>




Par avance, merci !!
arnatan
Je n'ai toujours pas trouvé.

Si par hasard quelqu'un sait...

merci de votre aide gourou.gif
choy
Tu te fait un tableau du style

PHP


$mails = array(
0 => 'mail_1@domaine.com',
1 => 'mail_2@domaine.com',
2 => 'mail_3@domaine.com',
3 => 'mail_4@domaine.com'
);


et apres pour trouver le destinataire tu fais :

PHP

$destinataire = $mails[$_POST['Objet']];

puis mail($destinataire...

tu peux aussi faire un switch

PHP


switch($_POST['Objet']){
case 0:
$expediteur = 'mail_1@domaine.com';
break;
case 1:
$expediteur = 'mail_2@domaine.com';
break;
case 2:
$expediteur = 'mail_3@domaine.com';
break;
case 3:
$expediteur = 'mail_4@domaine.com';
break;
}

arnatan
Merci beaucoup ça fonctionne super !!

par contre je n'ai pas utiliser :

Citation
puis mail($destinataire...

tu peux aussi faire un switch


ça sert à quoi?
choy
mail($destinataire, autres params...); est la fonction qui envoi le mail. Si tu ne sais pas ça c'est que tu copie colle ton code sans rien regarder car elle y est présent.
Pour le switch ça fait relativement la meme chose que le tableau avec cependant quelques différences qui peuvent être pratique selon les cas... Je te laisse étudier ça
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.