Envoyer par mail un fichier téléchargé par le biais d'un formulaire html

cs_Elisa23 Messages postés 32 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 1 février 2010 - 28 janv. 2010 à 14:08
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 - 1 févr. 2010 à 15:08
Bonjour,

Je cherche depuis des jours mais, là, je craque... Tant pis pour ma fierté ! J'espère que vous pourrez m'aider...

J'ai fait un formulaire sur mon site internet. Les données renseignées dans le formulaire sont envoyées par mail (j'utilise PhpMailer).
Jusque là, pas de soucis, je reçois bien les données de type : nom, prénom, e-mail etc.

Là où ça se complique, c'est que je voudrais que les internautes puissent m'envoyer des fichiers. EX. : une personne qui remplit un formulaire de candidature et qui télécharge son CV => Je voudrais recevoir le CV en pièce jointe dans le mail.

Je reçois bien une pièce jointe, mais le soucis c'est qu'elle arrive "sans format". Par ex. Un internaute qui m'envoie le fichier "cv.doc", je reçois bien un fichier mais il s'appelle "phpiJljEo" sans extension?

Comment faire pour que le fichier arrive en pièce jointe avec son nom "d'origine" ?

Merci d'avance pour votre aide !

11 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
29 janv. 2010 à 00:49
Salut,

Il faut simplement renommer le fichier uploadé. Le mieux est encore de le déplacer avec move_uploaded_file, qui permet de le renommer lors du déplacement.
La variable $_FILES contient toutes les informations nécessaires au traitement du fichier uploadé.

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
0
cs_Elisa23 Messages postés 32 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 1 février 2010
29 janv. 2010 à 09:00
Bonjour, neigedhiver !

Merci beaucoup pour ta réponse.

J'avais vu que move_uploaded_file existait, mais je ne sais pas m'en servir... Je ne sais pas vers quoi déplacer mon fichier puisque je ne travaille pas avec une base de donnée...
Je veux envoyer le fichier vers AddAttachment pour que je le reçoive par mail.
Du coup, je dois déplacer vers quoi ? Vers une variable intermédiaire ?

Merci d'avance de m'aider !

Elisa
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
29 janv. 2010 à 12:57
Salut,

Il faut déplacer le fichier dans un répertoire de ton site (que ce répertoire soit ou non accessible depuis le web).
move_uploaded_file prend deux arguments : le chemin du fichier temporaire uploadé et le chemin du nouveau fichier (répertoire + nom du fichier). C'est le fait de spécifier un nom de fichier différent qui le renomme.
Le chemin du fichier temporaire est indiqué dans la variable $_FILES ainsi que son nom d'origine.

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
0
cs_Elisa23 Messages postés 32 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 1 février 2010
29 janv. 2010 à 13:29
Merci. J'ai beaucoup à apprendre, désolée.

Si je fais :
move_uploaded_file($_FILES['file1']['tmp_name'], $_FILES['file1']['name']);


Est-ce que je peux faire un "echo" pour vérifier si le nom à changé ?

Comment je me sert du répertoire du site dont tu parles ?

Merci d'avance.

Elisa
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
29 janv. 2010 à 15:51
Je crois que $_FILES['file1']['name'] contient uniquement le nom du fichier : il faut y rajouter le chemin (répertoires) dans lequel tu souhaites le déplacer. Idem, je ne sais plus ce qu'il y a dans $_FILES['file1']['tmp_name'] : le nom du fichier ou son chemin complet.

Pour faire propre, stocke le (nouveau) chemin complet du fichier dans une variable, que tu pourras réutiliser ensuite pour la mettre en pièce jointe à ton mail.
<?php
$new_path = '/chemin/vers/le/repertoire/de/ton/choix/' . $_FILES['file1']['name'];
move_uploaded_files($_FILES['file1']['tmp_name'], $new_path);
?>

Tu peux utiliser echo pour vérifier que $new_path correspond bien au nom du fichier que tu souhaites, avec le bon répertoire.

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
0
cs_Elisa23 Messages postés 32 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 1 février 2010
29 janv. 2010 à 22:19
Salut !

Merci beaucoup pour ton aide !

Quand je fais echo sur $new_path, je vois que ça marche bien, mais quand je veux envoyer le contenu de $new_path par mail ça ne fonctionne pas.
$mail->AddAttachment($new_path);



J'ai le message d'erreur :
Could not access file: /repertoire/fichier.doc

Je ne vois vraiment plus quoi essayer !

Merci d'avance si tu as d'autres idées !

Elisa
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
29 janv. 2010 à 23:10
Ben normalement, c'est à ce moment là de l'histoire que tu dévoiles ton.... code (what else ?)
Pour l'instant, c'est pas facile de savoir ce qui cloche, parce que je ne sais pas précisément ce que tu fais ;)

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
0
cs_Elisa23 Messages postés 32 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 1 février 2010
1 févr. 2010 à 14:14
Bonjour,

Voici un code qui "fonctionn" à ceci près que je reçois par mail un fichier qui a un nom étrange (!) => le tmp_name en fait... Et je n'arrive pas à faire en sorte que mon fichier arrive par mail avec son nom de départ.

Code du formulaire :

<form method="post" action="traitement_formulaire.php" enctype="multipart/form-data"> 
Nom : 
 
Prénom : 

E-mail : 

Téléphone : 





 
</form>




Code traitement :
<?php 
$prenom = $_POST['prenom']; 
$nom = $_POST['nom'];
$email = $_POST['mail'];
$phone = $_POST['phone'];


require "class.phpmailer.php";
$mail = new PHPmailer();
$mail->IsSMTP();
$mail->IsHTML = true;
$mail->SMTPAuth   = true;
$mail->SMTPSecure = "ssl";
$mail->Host       = "smtp.gmail.com";
$mail->Port       = 465;
$mail->Username   = "*****";
$mail->Password   = "*****";
$mail->From='*****';
$mail->AddCc($email);
$mail->AddAddress('*****');
$mail->AddReplyTo('*****');
$mail->AddAttachment($_FILES['file']['tmp_name']);
$mail->CharSet = 'iso-8859-1';
$mail->ContentType = 'text/html';
$mail->Encoding = '8bit';


$mail->Subject = 'Candidature Spontanée';
$mail->Body .= 'Coordonnées : ' .'

';
$mail->Body .= $civil .' ' .$prenom .' ' .$nom .'
';
$mail->Body .= $phone .'
';
$mail->Body .= $email .'

';
$mail->Body .= 'CV et lettre de motivation en pièces jointes';



if(!$mail->Send()){ 
  echo $mail->ErrorInfo; 
}
else
unset($mail);
?>




Les ***** remplacent mon adresse e-mail ou password.

Merci d'avance pour votre aide !

Elisa
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
1 févr. 2010 à 14:22
Salut,

La méthode AddAttachment accepte plusieurs arguments. Le premier étant le chemin du fichier. Mais le second permet, si j'en crois ce que je lis dans la doc, de spécifier le nom du fichier joint. Est-ce que ça marche ?
Source : http://phpmailer.worxware.com/index.php?pg=methods


--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
0
cs_Elisa23 Messages postés 32 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 1 février 2010
1 févr. 2010 à 15:02
YEEEEEEEEEESSSSSSSSSSSSS

Un GRAND MERCI à toi !!!

Tu ne peux pas imaginer le temps que j'ai passé là dessus !

Vraiment, merci !

Elisa
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
1 févr. 2010 à 15:08
Pas de quoi. Content que ton problème soit solutionné ;)


--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
0