18041 sujets
Questions générales et questions de débutants
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 é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";
}
?>
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
ou tu envoie un contenu $_message qui est une variable qui n'existe pas., il faudrait utiliser plutôt
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)
et
à corriger par
ainsi que
à remplacer par
Les simples quotes n'interprètent ni \r ni \n
Modifié par kustolovic (11 Dec 2014 - 14:08)
$_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)
Ok je crois savoir pourquoi tu n'as pas l'image
en fait tu envoi le nom de l'image originale dans ton code
Puis plus loin
il faudrait remplacer par
Alors au passage j'explique pourquoi
attachment DOIT être un fichier physiquement présent sur le serveur 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
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
attachment DOIT être un fichier physiquement présent sur le serveur 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
ok
bon je me souvenais plus lequel des deux doit être le fichier...
essayes la meme chose là :
par
là si tu as ton image tu pourra remettre en état l'autre ligne...
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...
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
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
Ok
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 :
avec le vrai chemin juste avant /tmp
le ../ remonte à la racine donc c://
puis tu lui met le chemin qui suit
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
le ../ remonte à la racine donc c://
puis tu lui met le chemin qui suit
ok t'es chez ovh
de rien pour l'aide c'est le but de ce forum
donc ton rep www est là -> /home/var/www
et ton tmp est perdu dan les méandres de Linux
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
de rien pour l'aide c'est le but de ce forum
donc ton rep www est là -> /home/var/www
et ton tmp est perdu dan les méandres de Linux
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
Hello
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
le code est pret à être utilisé pour ton cas
tu peux le placer juste en dessous de ce commentaire présent dans ton code
ensuite tu remet les lignes que je t'ai fait modifier avant comme elles étaient
et enfin pour finir
tu modifie comme ça
voilà ça ça devrai tfocntionner
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
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 été envoyé nous vous répondrons dans les plus bref délais. <br><p> Merci de votre visite</p>";
voilà ça ça devrai tfocntionner
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é
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 é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";
}
?>