Page 1 sur 1

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

Posté : 11 août 2010, 16:37
par chrossat
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

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

Posté : 11 août 2010, 16:39
par stealth35
google ?

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

Posté : 11 août 2010, 16:44
par chrossat
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

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

Posté : 11 août 2010, 16:53
par stealth35
montre ce que t'as essayé :wink:

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

Posté : 11 août 2010, 17:03
par chrossat
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

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

Posté : 11 août 2010, 17:11
par stealth35
c'est un code pour uploader un fichier ca pas pour faire un mail

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

Posté : 11 août 2010, 17:15
par chrossat
Pourriez-vous m'aiguiller sur le bon code(tuto où je pourrais le trouver, etc.)?

Salutations
Christian

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

Posté : 11 août 2010, 17:17
par stealth35
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:

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

Posté : 11 août 2010, 17:25
par chrossat
Ok, je vais continuer à chercher! Merci

Christian

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

Posté : 12 août 2010, 10:01
par chrossat
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

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

Posté : 13 août 2010, 09:29
par chrossat
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

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

Posté : 13 août 2010, 09:31
par chrossat
... 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

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

Posté : 13 août 2010, 09:53
par Dr@ke
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

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

Posté : 13 août 2010, 10:36
par chrossat
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