Envoi d'une pièce jointe par email depuis un formulaire

Eléphanteau du PHP | 10 Messages

11 août 2010, 16:37

Bonjour,

J'ai cherché en vain une solution simple qui me permette d'envoyer une pièce jointe par email depuis un formulaire présent sur une page web. Je travaille avec un CMS qui ne permet pas d'insérer du PHP dans la page, mais nous pouvons passer par un fichier PHP séparé (<form action="envoi.php" ...)

si quelqu'un peut me dire où trouver le code (formulaire HTML et fichier PHP)

Salutations

Christian

ViPHP
ViPHP | 5462 Messages

11 août 2010, 16:39

google ?

Eléphanteau du PHP | 10 Messages

11 août 2010, 16:44

Bonjour,

Oui, j'ai cherché sur Google, mais n'ai rien trouvé qui fonctionne. J'ai fait quelques tests, mais sans succès.

Salutations

Christian

ViPHP
ViPHP | 5462 Messages

11 août 2010, 16:53

montre ce que t'as essayé :wink:

Eléphanteau du PHP | 10 Messages

11 août 2010, 17:03

Ok, j'ai essayé ceci:

Pour le formulaire:

<form action="form_file.php" enctype="multipart/form-data" id="form1" method="post">
<input name="max_file_size" type="hidden" value="1000" /> Envoyer ce fichier : <input name="fichier" type="file" /> <input type="submit" value="Envoyer le fichier" />
</form>

... et pour le fichier form_file.php:

<?php

//On simplifie le nom des variables $_FILES

$tmp_name=$_FILES['fichier']['tmp_name'];
$name=$_FILES['fichier']['name'];
$size=$_FILES['fichier']['size'];
$type=$_FILES['fichier']['type'];
$erreur=$_FILES['fichier']['error'];

//On affiche les différentes variables

echo "Nom du fichier :".$name;
echo "<br>Taille du fichier :".$size;
echo "<br>Type de fichier :".$type;
echo "<br>Nom temporaire :".$tmp_name;
echo "<br>Erreur :".$erreur;

//On crée une variable contenant le répertoire de destination

$uploadpath="temp";

//On déplace le fichier du dossier temporaire vers le dossier de destination

move_uploaded_file($tmp_name,$uploadpath.$name);

?>

Mail il se trouve que je ne comprends pas bien ce code PHP. Je désire bien envoyer un email avec pièce jointe et non mettre le fichier joint dans un dossier à uploader par FTP.
Je pense que je suis à côté de la plaque avec ce code!

Salutations
Christian

ViPHP
ViPHP | 5462 Messages

11 août 2010, 17:11

c'est un code pour uploader un fichier ca pas pour faire un mail

Eléphanteau du PHP | 10 Messages

11 août 2010, 17:15

Pourriez-vous m'aiguiller sur le bon code(tuto où je pourrais le trouver, etc.)?

Salutations
Christian

ViPHP
ViPHP | 5462 Messages

11 août 2010, 17:17

Pourriez-vous m'aiguiller sur le bon code(tuto où je pourrais le trouver, etc.)?

Salutations
Christian

http://www.google.fr/search?hl=fr&q=php ... ece+jointe
:wink:

Eléphanteau du PHP | 10 Messages

11 août 2010, 17:25

Ok, je vais continuer à chercher! Merci

Christian

Eléphanteau du PHP | 10 Messages

12 août 2010, 10:01

Bonjour,

Grâce à vos conseils, j'ai trouvé quelque chose d'intéressant, mais il y a quelque chose coince.

Le formulaire:

<form action="form_file2.php" method="post" name="formulaire">
Nom : <input maxlength="50" name="nom" size="30" type="text" /><br />
<br />
Pr&eacute;nom : <input maxlength="50" name="prenom" size="30" type="text" /><br />
<br />
E-mail : <input maxlength="50" name="mail" size="30" type="text" /><br />
<br />
Commentaires :<textarea cols="30" name="commentaires" rows="6" wrap="soft"></textarea><br />
<br />
Fichier : <input maxlength="60" name="scan" size="40" type="file" /><br />
<br />

Le fichier form_file2.php:

<?php
$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
$mail = $_POST['mail'];
$commentaires= $_POST['commentaires'];
$scan=$_post['scan'];

echo"nom: $nom<br>"; // Rajouté pour voir le contenu des variables
echo"prenom: $prenom<br>"; // Rajouté pour voir le contenu des variables
echo"mail: $mail<br>"; // Rajouté pour voir le contenu des variables
echo"commentaires: $commentaires<br>"; // Rajouté pour voir le contenu des variables
echo"scan: $scan<br>"; // Rajouté pour voir le contenu des variables


//=====Déclaration des messages au format texte et au format HTML
$message_txt ="Nom : ";
$message_html = "<html><head></head><body><b>Données pour la demande d'accès</b>,<br><br> <b>Nom :</b> $nom <br> <b>Prenom :</b> $prenom <br> <b>Email: </b> $mail </body></html>";
//==========

//=====Lecture et mise en forme de la pièce jointe
$fichier = fopen($scan, "r" );
$attachement = fread($fichier, filesize($scan));
$attachement = chunk_split(base64_encode($attachement));
fclose($fichier);
//==========

//=====Création de la boundary
$boundary = "-----=".md5(rand());
$boundary_alt = "-----=".md5(rand());
//==========

//=====Définition du sujet
$sujet = "Hey mon ami !";
//=========

//=====Création du header de l'e-mail
$header = "From: \"WeaponsB\"<[email protected]>\n";
$header.= "Reply-to: \"WeaponsB\" <[email protected]>\n";
$header.= "MIME-Version: 1.0\n";
$header.= "Content-Type: multipart/mixed;\n boundary=\"$boundary\"\n";
//==========

//=====Création du message
$message = "\n--".$boundary."\n";
$message.= "Content-Type: multipart/alternative;\n boundary=\"$boundary_alt\"\n";
$message.= "\n--".$boundary_alt."\n";
//=====Ajout du message au format texte
$message.="Content-Type: text/plain; charset=\"ISO-8859-1\"\n";
$message.="Content-Transfer-Encoding: 8bit\n";
$message.= $message_txt."\n";
//==========

$message.= "\n--".$boundary_alt."\n";

//=====Ajout du message au format HTML
$message.="Content-Type: text/html; charset=\"ISO-8859-1\"\n";
$message.="Content-Transfer-Encoding: 8bit\n";
$message.= $message_html."\n";
//==========

//=====On ferme la boundary alternative
$message.= "\n--".$boundary_alt."--\n";
//==========



$message.= "\n--".$boundary."\n";

//=====Ajout de la pièce jointe
$message.= "Content-Type: application/pdf;\n name=\"$scan\"\n";
$message.= "Content-Transfer-Encoding: base64\n";
$message.= "Content-Disposition: attachment;\n filename=\"$scan\"\n";
$message.= "\n".$attachement."\n\n";
$message.= "\n--".$boundary."--\n";
//==========
//=====Envoi de l'e-mail
mail("[email protected]",$sujet,$message,$header);

//==========
?>
<input name="bouton" type="submit" value="Envoyer" /></form>

... et j'ai le message d'erreur suivant:

nom: Mon nom
prenom: Mon prénom
mail: [email protected]
commentaires: Commentaires
scan:

Warning: fopen() [function.fopen]: Filename cannot be empty in /home/www/d535fb38b1eca95aa12713ac33940cbd/web/form_file2.php on line 21

Warning: fread(): supplied argument is not a valid stream resource in /home/www/d535fb38b1eca95aa12713ac33940cbd/web/form_file2.php on line 22

Warning: fclose(): supplied argument is not a valid stream resource in /home/www/d535fb38b1eca95aa12713ac33940cbd/web/form_file2.php on line 24

... On constate notamment que le contenu de la variable $scan est vide. Pour info, la ligne 21 est: $fichier = fopen($scan, "r" );

Pouvez-vous me dire quel est le problème?

Salutations
Christian

Eléphanteau du PHP | 10 Messages

13 août 2010, 09:29

Bonjour,

J'ai avancé d'un pas en modifiant $scan=$_post['scan']; par $scan=$_POST['scan'];, ce qui permet de récupérer correctement la valeur de la variable $scan. J'ai maintenant le message d'erreur suivant:

Warning: fopen() [function.fopen]: Filename cannot be empty in /home/www/d535fb38b1eca95aa12713ac33940cbd/web/form_file2.php on line 21

Warning: fread(): supplied argument is not a valid stream resource in /home/www/d535fb38b1eca95aa12713ac33940cbd/web/form_file2.php on line 22

Warning: fclose(): supplied argument is not a valid stream resource in /home/www/d535fb38b1eca95aa12713ac33940cbd/web/form_file2.php on line 24

pour rappel, la ligne 21 est: $fichier = fopen($scan, "r" ); (le reste du code se trouve dans mon dernier email).

Si quelqu'un pouvait m'aider à avancer, j'en serais heureux.

Salutations
Christian

Eléphanteau du PHP | 10 Messages

13 août 2010, 09:31

... excusez-moi. Le BON message d'erreur est:

Warning: fopen(pdf_leger.jpg) [function.fopen]: failed to open stream: No such file or directory in /home/www/d535fb38b1eca95aa12713ac33940cbd/web/form_file2.php on line 21

Mammouth du PHP | 985 Messages

13 août 2010, 09:53

Salut,
je pense qu'il y aura peu de réponses à ton post malheureusement.
Et ce pour deux principales raisons:
- 1: Tu t'es trompé de section, car ton post devrait se trouver dans la section Php débutant.
- 2: Si tu utilises le moteur de recherche du forum -> tu trouveras des centaines de sujets qui répondent à ta question...

Amicalement,
Dr@ke
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphanteau du PHP | 10 Messages

13 août 2010, 10:36

Merci, j'ai cherché un peu dans le moteur de recherche, mais n'ai rien trouvé de directement lié à ma question. Je vais donc poster ma question sur le forum débutants.

Salutations
Christian