Bonjour à tous,
Voilà je viens ce matin car je bug sur l'envoie de mail avec pièce jointe.
En effet, je viens de créerr une page web ou des candidats à l'embauche pourraient venir soumettre leur dossier (CV, diplôme et aussi une photo d'identité en option) et après validation du formulaire, exécuter un script php qui se chargera de transmettre les infos au responsable du recrutement.
Voici donc la structure test de mon formulaire (que j'ai raccourci à l'envoie d'un seul fichier dans un premier temps afin de tester:
Page form_test_envoiePiece.php
Et ci-dessous la première ébauche de code pour le traitement
fichier reception_variables.php
Le seul problème avec ce fichier c'est que voici le message que je reçois après validation du form
Aussi j'ai appris que je pouvais stocker le fichier dans un dossier temporaire avant de l'envoyer g donc utiliser move_upload_files en transformant mon fichier reception_variable php en:
Et là, je n'ai plus d'erreur mais pas de mail non plus
Modifié par goldenfisch (03 Oct 2012 - 12:43)
Voilà je viens ce matin car je bug sur l'envoie de mail avec pièce jointe.
En effet, je viens de créerr une page web ou des candidats à l'embauche pourraient venir soumettre leur dossier (CV, diplôme et aussi une photo d'identité en option) et après validation du formulaire, exécuter un script php qui se chargera de transmettre les infos au responsable du recrutement.
Voici donc la structure test de mon formulaire (que j'ai raccourci à l'envoie d'un seul fichier dans un premier temps afin de tester:
Page form_test_envoiePiece.php
<html>
<head>
<title></title>
</head>
<body>
<form id="form_carriere" method="post" action="reception_variables.php" enctype="multipart/form-data">
<fieldset>
<legend>Votre identité</legend>
<p>
<label for="nom">Nom :</label>
<input type="text" style="background-color:#09C; padding-left:10px; font-family:'nevis Bold', Arial; font-size:11px; color:#FFF;" name="nom" id="nom">
</p>
<p>
<label for="prenom">Prénom :</label>
<input type="text" style="background-color:#09C; padding-left:10px; font-family:'nevis Bold', Arial; font-size:11px; color:#FFF;" name="prenom" id="prenom">
</p>
<p>
<label for="objet">Objet de votre mail :</label>
<input type="text" style="background-color:#F00; padding-left:10px; font-family:'nevis Bold', Arial; font-size:11px; color:#FFF;" name="objet" id="objet">
</p>
<p>
<label for="message">Message :</label><br/>
<textarea style="background-color:#FFF; padding:4px; font-family:'nevis Bold', Arial; font-size:12px; color:#555;" name="message" id="message" cols="50" rows="12"></textarea>
</p>
<p>
<label for="email">Email pour vous répondre :</label>
<input type="text" style="background-color:#Fbf; padding-left:10px; font-family:'nevis Bold', Arial; font-size:11px; color:#000;" name="email" id="email">
</p>
</fieldset>
<fieldset>
<legend>Votre pièce à joindre</legend>
<label for="piecejointe" style="margin-top:8px; margin-bottom:8px;">Sélectionner un fichier (seuls les fichiers .doc, .jpg, .gif, .png ou .pdf sont acceptés)</label><br/>
<input type="hidden" name="MAX_FILE_SIZE" value="1048576" />
<input type="file" name="piecejointe" id="piecejointe">
</fieldset>
<input type="submit" name="submit" id="submit" value="Envoyer">
</form>
</body>
</html>
Et ci-dessous la première ébauche de code pour le traitement
fichier reception_variables.php
<?php
// On vérifie que le formulaire a été correctement rempli
if(isset($_POST['submit'])){
// On vérifie que les chanmps existent
if(isset($_POST['nom']) && isset($_POST['prenom']) && isset($_POST['objet']) && isset($_POST['message']) && isset($_POST['email'])){
// si la réponse est positive, alors on récupère les valeurs à traiter
$_nomExpediteur = $_POST['nom'];
$_prenomExpediteur = $_POST['prenom'];
$_objet = $_POST['objet'];
$_messageExpediteur = $_POST['message'];
$_emailExpediteur = $_POST['email'];
echo "<br/>".$_prenomExpediteur."<br/>";
// clé aléatoire de limite
$_boundary = md5(uniqid(microtime(), TRUE));
// headers des mails
$_headers = 'From : '.$_nomExpediteur.' '.$_prenomExpediteur.'<'.$_emailExpediteur.'>'."\r\n".'Reply-To:'.$_emailExpediteur."\r\n".'X-Mailer [langue]HP/'.phpversion();
$_headers .= 'Ccc : Lucius SAHAJ <lesahaj@gmail.com>,'.$_nomExpediteur.' '.$_prenomExpediteur.'<'.$_emailExpediteur.'>'."\r\n";
$_headers = 'Mime-Version: 1.0'."\r\n";
$_headers .= 'Content-type: multipart/mixed;boundary='.$_boundary."\r\n";
$_headers .= "\r\n";
// encodage des caractères
$_msg = 'Ceci est un mail automatique provenant de webmaster ANINF et est sous forme multipart/mixed';
$_msg .= '--'.$_boundary."\r\n";
$_msg .= 'Content-type:text/plain;charset=utf-8'."\r\n";
$_msg .= 'Content-transfer-encoding:8bit'."\r\n";
$_msg .= 'Test message avec une pièce jointe.'."\r\n";
// au contenue de $_msg je vais ajouter le message du visiteur
$_msg .= '--'.$_boundary."\r\n";
$_msg .= $_messageExpediteur."\r\n";
$_msg .= "\r\n";
if (isset($_FILES['piecejointe']) && is_uploaded_file($_FILES['piecejointe']['temp_name'])){
// on récupère les valeurs du fichier en piece jointe
$_nomFichier = $_FILES['piecejointe']['name']; // Le nom original du fichier, comme sur le disque du visiteur (exemple : mon_icone.png).
$_typeFichier = $_FILES['piecejointe']['type']; // Le type du fichier. Par exemple, cela peut être « image/png ».
$_tailleFichier = $_FILES['piecejointe']['size']; // La taille du fichier en octets.
// traitement du fichier joint
$_content = chunk_split(base64_encode(file_get_contents($_nomFichier)));
// on attache les fichiers
$_msg .= '--'.$_boundary."\r\n";
$_msg .= 'Content-type:'.$_typeFichier.';name='.$_nomFichier."\r\n";
$_msg .= 'Content-transfer-encoding:base64'."\r\n";
$msg .= "Content-Disposition: attachment; filename=\"$_nomFichier\"\n\n";
$_msg .= $content."\r\n";
// fin de tous les traitements de fichiers
$_msg .= '--'.$_boundary."\r\n";
// Toutes les valeurs sont correctes alors on lance l'envoie du mail
// @mail de destination des mails
$_to = 'lucien.momba@aninf.ga';
// On envoit le mail
if(mail($_to, $_objet, $_message, $_headers)){
echo "Votre mail a bien été envoyé nous vous répondrons dans les plus bref délais. <br><p> Merci de votre visite</p>";
}
else echo "L'envoie du dossier a échoué<br/>";
}
else echo "Problème avec la pièce jointe. <br/>Le mail n'a pas été envoyé ";
}
else echo "Remplissez correctement le formulaire";
}
?>
Le seul problème avec ce fichier c'est que voici le message que je reçois après validation du form
a écrit :
ANINF
Warning: is_uploaded_file() expects parameter 1 to be string, array given in C:\wamp\www\static\reception_variables.php on line 40
Problème avec la pièce jointe.
Le mail n'a pas été envoyé
Aussi j'ai appris que je pouvais stocker le fichier dans un dossier temporaire avant de l'envoyer g donc utiliser move_upload_files en transformant mon fichier reception_variable php en:
<?php
/*********************************************************************
== Avant toutes actions, on prépare la structure de notre mail html ==
== ==
*********************************************************************/
// Création de la clé aléatoire délimitant les parties du mail
$_boundary = md5(uniqid(microtime(), TRUE));
// Mime versions
$_headersMimev = 'Mime-Version: 1.0'."\r\n";
$_headersContent .= 'Content-type: multipart/mixed;boundary='.$_boundary."\r\n";
$_headersChariot .= "\r\n";
// encodage des caractères
$_msg = 'Ceci est un mail automatique provenant de webmaster ANINF et est sous forme multipart/mixed';
$_msg .= '--'.$_boundary."\r\n";
$_msg .= 'Content-type:text/plain;charset=utf-8'."\r\n";
$_msg .= 'Content-transfer-encoding:8bit'."\r\n";
$_msg .= 'Test message avec une pièce jointe.'."\r\n";
// @mail de destination des mails
$_to = 'lucien.momba@aninf.ga';
/*********************************************************************
=== Traitement des données issue du formlaire de demande d'emploi ===
== ==
*********************************************************************/
// On vérifie que le formulaire a été correctement rempli
if(isset($_POST['submit'])){
// On vérifie que les chanmps existent
if(isset($_POST['nom']) && isset($_POST['prenom']) && isset($_POST['objet']) && isset($_POST['message']) && isset($_POST['email'])){
// les champs ci-dessus sont correctes alors on récupère leur valeur
$_nomExpediteur = $_POST['nom'];
$_prenomExpediteur = $_POST['prenom'];
$_objet = $_POST['objet'];
$_messageExpediteur = $_POST['message'];
$_emailExpediteur = $_POST['email'];
// On test la véracité de la condition isset de ces champs en affichant par exemple le nom de l'expéditeur
echo "Merci M., Mlle, Mme ".$_nomExpediteur." de nous avoir visité <br/>";
// On écrit le header en y insérant les nom, prénom et mail de demandeur
$_headers .= 'From : '.$_nomExpediteur.' '.$_prenomExpediteur.'<'.$_emailExpediteur.'>'."\r\n".'Reply-To:'.$_emailExpediteur."\r\n".'X-Mailer [langue]HP/'.phpversion();
$_headers .= 'Ccc : Lucius SAHAJ <lesahaj@gmail.com>,'.$_nomExpediteur.' '.$_prenomExpediteur.'<'.$_emailExpediteur.'>'."\r\n";
$_headers .= $_headersChariot;
$_headers .= $_headersMimev;
$_headers .= $_headersContent;
$_headers .= $_headersChariot;
// Ensuite, on vérifie la présence de la pièce jointe et on l'attache
if (isset($_FILES['piecejointe']) && $_FILES['piecejointe']['error'] == 0){
if ($_FILES['piecejointe']['size'] <= 1000000){
$_infosfichier = pathinfo($_FILES['piecejointe']['name']);{
move_uploaded_file($_FILES['piecejointe']['tmp_name'], './' .basename($_FILES['piecejointe']['name']));
echo "Opération effectué avec succè";
}
}
}
//else echo "le chargement du fichier ".$_FILES['piecejointe']['name']." a échoué";
$_nomFichier = $_FILES['piecejointe']['name'];
if (file_exists($_nomFichier)){
echo $_nomFichier;
$_typeFichier = filetype($_nomFichier);
$_tailleFichier = filesize($_nomFichier);
$_content = chunk_split(base64_enncode(file_get_contents($_nomFichier)))."\n";
// On écrit le mail
$_msg .= '--'.$_boundary."\r\n";
// On joint le message de l'utilisateur
$_msg .= $_messageExpediteur;
$_msg .= '--'.$_boundary."\r\n";
// On attache la pièce jointe
$_msg .= 'Content-type:'.$_typeFichier.';name='.$_nomFichier."\r\n";
$_msg .= 'Content-transfert-encoding:base64'."\r\n";
$_msg .= "Content-Disposition: attachement; filename=\"$_nomFichier\"\n\n";
$_msg .= $_content."\r\n";
}
if(!mail($_to,$_POST['intitule_des_problemes'], $_msg, $_headers)){
echo "ERROR";
}
else echo "Mail bien envoyé";
}
else echo " Veuillez vérifier que les champs nom, prenom, objet, message et email aient été bien renseigné";
}
else echo "Formulaire non envoyé";
?>
Et là, je n'ai plus d'erreur mais pas de mail non plus

Modifié par goldenfisch (03 Oct 2012 - 12:43)