Envoi de mail avec pièces jointes en php

HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !
SB
Varan
Messages : 1095
Inscription : 05 mars 2004, 18:38

Envoi de mail avec pièces jointes en php

Message par SB »

Salut.
J'ai un petit souci avec un code d'upload de fichiers que j'ai trouvé sur le net. Tous mes fichiers sont uploadés sous le même nom, à savoir "mail", ce qui me pose 2 problèmes. Ces fichiers étant destinés à être envoyés en pièce jointe par mail ça me limite à une seule pièce jointe puisque chaque upload écrase le précédent. D'autre part comme l'extension est supprimé celui qui reçoit la pièce ne sait jamais quel programme utiliser. J'avoue que je ne m'y connait pas du tout avec cette fonction. Quelqu'un voit-il comment changer cela ?
Merci.

Code : Tout sélectionner

<?php /*fonction d'upload de fichier */
function uploadProg($source) {
$ok_copy=move_uploaded_file($source,"mail/"); // a remplacer par le repertoire ou sera uploadé le fichier
if($ok_copy==true) {echo "Fichier chargé<br />";}
if($ok_copy==false) {print("Erreur : le fichier n'a pu être chargé !<br />");}
}
?>
<label for="upload">Pièce jointe</label><br />
<input type="file" name="upload" />
<input type="hidden" name="action" value="uploadProg" />
<input type="hidden" name="MAX_FILE_SIZE" value="2048" /><!-- taille max du fichier -->
<input type="submit" name="charger" value="Charger la pièce jointe" /><br /><br />
<?
if($action=="uploadProg"){uploadProg($upload);}
?>
Blustuff
Gecko
Messages : 51
Inscription : 15 mars 2005, 01:10

Message par Blustuff »

Chez moi le code que vous donnez ne marche pas. (toujours en echec sur move) En revanche, j'ai le nom du fichier, ainsi que son extension. Si le nom vous gêne génerez donc des noms différents à chaque fois, non ?
GregK84
Lézard à collerette
Messages : 360
Inscription : 15 oct. 2004, 15:24

Message par GregK84 »

voici une autre methode qui fonctionne relativement bien (meme si le traitement peut etre un peu lourd par moment)

http://www.zdnet.fr/builder/programmati ... 927,00.htm

PS: c'est sur la 4eme pages :wink:
Firefox,
Time for the hunted to be the hunter.

Config : WinXp, FF 1.0, TB 1.0, SB 0.2.
SB
Varan
Messages : 1095
Inscription : 05 mars 2004, 18:38

Message par SB »

Bon j'ai résolu le problème en utilisant la fonction rename() après l'upload. Mais j'ai l'impression qu'il y avait plus simple et je n'ai toujours pas compris d'où pouvait venir ce nom par défaut de "mail". :?
GregK84
Lézard à collerette
Messages : 360
Inscription : 15 oct. 2004, 15:24

Message par GregK84 »

cela pourrait venir de ta variable "$source"

http://be2.php.net/manual/fr/function.m ... d-file.php

meme si j'ai des doutes ...

EDIT :

c le chemin du fichier et puis son nom (et pas le nom du repertoire... il me semble)

Code : Tout sélectionner

<?php
move_uploaded_file(
  $_FILES["file"]["tmp_name"],
  $dir . preg_replace('/[^a-z0-9_\-\.]/i', '_', $_FILES["file"]["name"])
);
?>
Firefox,
Time for the hunted to be the hunter.

Config : WinXp, FF 1.0, TB 1.0, SB 0.2.
Blustuff
Gecko
Messages : 51
Inscription : 15 mars 2005, 01:10

Message par Blustuff »

Hem... oui, lien plus interessant encore : http://be2.php.net/manual/fr/features.file-upload.php

Où vous avez toutes les informations sur la marche à suivre. En particulier on peut voir un très interessant :

Code : Tout sélectionner

print_r($_FILES);
Très explicite. En revanche, on voit que l'eemple que vous donnez au début comporte quelques erreurs : La taille max doit être spécifiée avant le champs fichier. Je ne comprends pas très bien comment vous accèdez au nom du fichier sinon, en fait, je ne vois même pas comment ça peut marcher :/
GregK84
Lézard à collerette
Messages : 360
Inscription : 15 oct. 2004, 15:24

Message par GregK84 »

Blustuff a écrit :

Code : Tout sélectionner

<pre> <?php print_r($_FILES); ?> </pre>
pour une meilleur lisibilité :wink:
Firefox,
Time for the hunted to be the hunter.

Config : WinXp, FF 1.0, TB 1.0, SB 0.2.
SB
Varan
Messages : 1095
Inscription : 05 mars 2004, 18:38

Message par SB »

Et pourtant ça marche.
Je vois les choses comme ça :
Le champ

Code : Tout sélectionner

<input type="file" name="upload" />
prend la valeur du fichier temporaire, un truc genre /var/www/.... Lorsqu'on appuie sur "charger la pièce jointe" on recharge la page avec une variable $action (<input type="hidden" name="action" value="uploadProg" />) qui a pour effet d'envoyer la valeur à la fonction uploadProg

Code : Tout sélectionner

if($action=="uploadProg"){uploadProg($upload);} 
La fonction transfert le fichier à l'aide de move_uploaded_file. Je suppose que c'est mon serveur qui transforme le nom temporaire "/var/www/..." en "mail" d'après le répertoire de destination.
GregK84
Lézard à collerette
Messages : 360
Inscription : 15 oct. 2004, 15:24

Message par GregK84 »

tu peux faire un test, tu nome ton repertoire autrement que mail et tu verras bien si ton fichier prend un autre nom ...

je pense que ton fichier est renomé par mail a cause de ta ligne :

Code : Tout sélectionner

"mail/"
mais bon si cela fonctionne c le principal :P parfois il ne faut pas chercher a comprendre :wink:
Firefox,
Time for the hunted to be the hunter.

Config : WinXp, FF 1.0, TB 1.0, SB 0.2.
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 2 invités