Pages :
(reprise du message précédent)

et sinon aussi tu peux tout mettre à jour ton code pour savoir où tu en es Smiley smile
voila le code

<?php
// On vérifie que le formulaire a été correctement rempli
if(isset($_POST['submit'])){

// On vérifie que les champs 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  Smiley langue HP/'.phpversion();
	$_headers .= 'cc : 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\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 .= $_msg."\r\n";
	$_msg .= "\r\n";
	
	if (isset($_FILES['piecejointe']) && is_uploaded_file($_FILES['piecejointe']['tmp_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."--";

	// Toutes les valeurs sont correctes alors on lance l'envoie du mail
	
	// @mail de destination des mails
	$_to = 'jim.devif@laposte.net';
	
	// On envoit le mail
	if(mail($_to, $_objet, $_message, $_headers)){
		echo "Votre mail a bien &eacute;t&eacute; envoy&eacute; nous vous r&eacute;pondrons dans les plus bref d&eacute;lais. <br><p> Merci de votre visite</p>";
	}
	else echo "L'envoie du dossier a &eacute;chou&eacute;<br/>";
	}
	else echo "Probl&egrave;me avec la pi&egrave;ce jointe. <br/>Le mail n'a pas &eacute;t&eacute; envoy&eacute; ";
}
else echo "Remplissez correctement le formulaire";
}
?>
Modérateur
Comme le suggère la source de ton mail et le commentaire de pchlj, il n'y a aucun contenu dans ton mail. Parce que c'est la ligne
mail($_to, $_objet, $_message, $_headers)

ou tu envoie un contenu $_message qui est une variable qui n'existe pas., il faudrait utiliser plutôt
mail($_to, $_objet, $_msg, $_headers)
Modérateur
et
$_msg .= "Content-Disposition: attachment; filename=\"$_nomFichier\"\n\n";

à corriger par
$_msg .= "Content-Disposition: attachment; filename=\"$_nomFichier\"\r\n\r\n";


ainsi que

$_msg .= 'Content-type:'.$_typeFichier.';name="'.$_nomFichier.'"\r\n';

à remplacer par
$_msg .= 'Content-type:'.$_typeFichier.';name="'.$_nomFichier."\"\r\n";

Les simples quotes n'interprètent ni \r ni \n
Modifié par kustolovic (11 Dec 2014 - 14:08)
effectivement c'est un peu mieux ! MERCI
je reçois ma pièce jointe mais après l'avoir télécharger
quand je l'ouvre il y'a pas mon image il y'a aucun aperçu

et je n'est toujours pas de message texte non plus j'ai seulement l'objet du mail
Ok je crois savoir pourquoi tu n'as pas l'image Smiley smile

en fait tu envoi le nom de l'image originale dans ton code

a écrit :
if (isset($_FILES['piecejointe']) && is_uploaded_file($_FILES['piecejointe']['tmp_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).


Puis plus loin

a écrit :
$_msg .= "Content-Disposition: attachment; filename=\"$_nomFichier\"\n\n";


il faudrait remplacer par
a écrit :
$_msg .= "Content-Disposition: attachment; filename=\"$_FILES['piecejointe']['tmp_name']\"\n\n";


Alors au passage j'explique pourquoi Smiley smile

attachment DOIT être un fichier physiquement présent sur le serveur Smiley smile sauf que le nom du fihier original dans ton cas n'est pas présent sur le serveur c'est le fichier temporaire qui existe...

essayes et dis nous Smiley cligne
alors j'ai essayer comme tu a dit de remplaçer

c'est a dire :
$_msg .= "Content-Disposition: attachment; filename=\"$_FILES['piecejointe']['tmp_name']\"\n\n";


mais quand j'appuie sur envoyer rien .. sa me marque même plus que le message a bien était envoyer et je reçoit pas de mail
ok essayes comme ça

$_msg .= "Content-Disposition: attachment; filename=\"".$_FILES['piecejointe']['tmp_name']."\"\n\n";


la concaténation est peut être la solution
Alors le message s'envoie bien je le reçoit aussi sans problème

par contre toujours pas de texte écrit dedans

et ma pièce jointe est vide est son nom a changer elle s'appelle comme sa : /tmp/phpyfh3eE
ok Smiley lol

bon je me souvenais plus lequel des deux doit être le fichier...

essayes la meme chose là :

$_msg .= 'Content-type:'.$_typeFichier.';name="'.$_nomFichier.'"\r\n';


par

$_msg .= 'Content-type:'.$_typeFichier.';name="'.$_FILES['piecejointe']['tmp_name'].'"\r\n';


là si tu as ton image tu pourra remettre en état l'autre ligne...
La pièce jointe est toujours vide ..

c'est déjà bien je comprend ce que tu me dit de faire par contre je comprend absolument pas pourquoi je ne la reçoit pas c'est vraiment bizarre Smiley ohwell
bon.. alors ensuite le chemin de la pièce jointe DOIT être relatif...

donc est ce que /tmp/phpyfh3eE est accessible tel quel depuis ton fichier php ??

ou bien devrait il plutôt être du genre ../../../tmp/phpyfh3eE ???

regarde le dossier où se trouve ton programme d'envoi de mail.. repère son chemin complet depuis la racine

puis fai tla meme chose avec le dossier /tmp/

ça te permettra de trouver le chemin à suivre Smiley cligne
Mon fichier php se trouve dans www / il est la

je l'ai tout de suite mis dans www
je ne l'est pas mis dans un dossier

par contre je voit pas dans mon code ou est ce que je pourrait y mettre

l'image que je veut envoyer se trouve sur le bureau de mon ordinateur
oui d'accord ok il est dans le www Smiley smile

donc je suppose c://www ???? ou en linux /home/var/www ???

et le rep /tmp/ il est où ?? dans www aussi ??
oui il est dans c://www mon fichier PHP

mais par contre je suis pomé complet la j'ai pas de repertoire /tmp/
c'est a moi de le créer ? et y a quoi dans ce répertoire ?

peut tu m'expliquer stp ? j'ai vraiment envie de comprendre Smiley ohwell
Ok Smiley smile

donc php travaille avec des répertoires bien a lui qui sont en général sur le serveur.

Si tu es sur windows je suppose qu eut utilises WAMP ou EasyPHP ou d'autre du meme genre...

donc le répertoire tmp se trouve dans le répertoire de WAMP (ou autre)

donc il faut que tu indiques le chemin dans ton envoi de mail...

je connais pas WAMP je l'utilise pas.. mais on peut supposer un chemin de ce genre

../Program Files (x86)/WAMP/tmp/tonfichiertemporaire

donc il faudrait un truc comme ça :

$_msg .= 'Content-type:'.$_typeFichier.';name="../Program Files (x86)/WAMP'.$_FILES['piecejointe']['tmp_name'].'"\r\n';


avec le vrai chemin juste avant /tmp Smiley cligne

le ../ remonte à la racine donc c://
puis tu lui met le chemin qui suit
non je suis chez OVH j'ai un nom de domaine
et j'utilise filezilla pour transférer mes fichiers

mais je vois pas ou se trouve ce fichu répertoire tmp Smiley decu

en tous cas merci c'est trop gentil de ta part de prendre du temp pour m'aider !
ok t'es chez ovh Smiley smile

de rien pour l'aide c'est le but de ce forum Smiley cligne

donc ton rep www est là -> /home/var/www

et ton tmp est perdu dan les méandres de Linux Smiley smile

l'endroit où il se trouve est écrit dans le phpinfo()

ensuite si tu es sur un hébergement...

moi pour a part je fais d'abord un move_uploaded_file dans un répertoire dans mon www

il est plus simple de l'appeler quand on sait où il est, de cette manière tu peux lui donner le nom original.

ensuite c'est plus simple d'aller le chercher puis de l'effacer quadn l'envoi est fait Smiley smile
Salut je viens de lire ton dernier message

donc en faite il faudrait que je créer un répertoire que je nomme move_uploaded_file
et que je le place dans mon www ?

et je vois que tu parle de linux moi je suis sur windows je sait pas si c'est important de le dire ou pas mais au moins tu sait tout lol
Hello Smiley smile

Bon meme sur windows ça ne change pas grand chose à la gestion serveur (quelle idée d'être sur windows :s)

donc je te conseille ceci :

créer un répertoire 'temporaire' -> www/temporaire
avec tous les droits d'écritures d'accès etc

move_uploaded_file est une fonction php

donc après le test d'existence d'un fichier joint tu utilises cette fonction pour créer physiquement le fichier sur ton serveur

$uploads_dir = '/temporaire';
foreach ($_FILES["piecejointe"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $tmp_name = $_FILES["piecejointe"]["tmp_name"][$key];
        $name = $_FILES["piecejointe"]["name"][$key];
        move_uploaded_file($tmp_name, "$uploads_dir/$name");
    }
}


le code est pret à être utilisé pour ton cas Smiley smile

tu peux le placer juste en dessous de ce commentaire présent dans ton code

// on récupère les valeurs du fichier en piece jointe



ensuite tu remet les lignes que je t'ai fait modifier avant comme elles étaient

$_msg .= 'Content-type:'.$_typeFichier.';name="'.$_nomFichier.'"\r\n';
	$_msg .= 'Content-transfer-encoding:base64'."\r\n";
	$_msg .= "Content-Disposition: attachment; filename=\"$_nomFichier\"\n\n";



et enfin pour finir

tu modifie comme ça


foreach ($_FILES["piecejointe"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $name = $_FILES["piecejointe"]["name"][$key];
        unlink("/temporaire/$name");
    }
}

echo "Votre mail a bien &eacute;t&eacute; envoy&eacute; nous vous r&eacute;pondrons dans les plus bref d&eacute;lais. <br><p> Merci de votre visite</p>";


voilà ça ça devrai tfocntionner Smiley smile
Ree j'ai fait toute les modifications que tu ma dit et j'ai créer un dossier temporaire avec tous les droit aussi mais je reçoit toujours mon image jointe vide

voici le code modifié

	// on récupère les valeurs du fichier en piece jointe
    $uploads_dir = '/temporaire';
foreach ($_FILES["piecejointe"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $tmp_name = $_FILES["piecejointe"]["tmp_name"][$key];
        $name = $_FILES["piecejointe"]["name"][$key];
        move_uploaded_file($tmp_name, "$uploads_dir/$name");
    }
}
	$_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 = 'jim.devif@laposte.net';
	
	// On envoit le mail
	if(mail($_to, $_objet, $_msg, $_headers)){
	
foreach ($_FILES["piecejointe"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $name = $_FILES["piecejointe"]["name"][$key];
        unlink("/temporaire/$name");
    }
}
		echo "Votre mail a bien &eacute;t&eacute; envoy&eacute; nous vous r&eacute;pondrons dans les plus bref d&eacute;lais. <br><p> Merci de votre visite</p>";
	}
	else echo "L'envoie du dossier a &eacute;chou&eacute;<br/>";
	}
	else echo "Probl&egrave;me avec la pi&egrave;ce jointe. <br/>Le mail n'a pas &eacute;t&eacute; envoy&eacute; ";
}
else echo "Remplissez correctement le formulaire";
}
?>
Smiley ohwell
Pages :