IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

fonction mail() et piéce jointe


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 19
    Points : 10
    Points
    10
    Par défaut fonction mail() et piéce jointe
    Je rencontre un souci au niveau de l'envoi de la pièce jointe dans un mail
    php renvoi l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fopen('OpenDocument.doc') [function.fopen]: failed to open stream: No such file or directory in...
    Il ne semble pas être en mesure de récupérer le document et de l'envoyer directement à sa destination, un collègue ma dis de stocker ce mail sur le serveur, puis de l'envoyer, puis de le supprimer. Cela me semble être une grosse machine à gaz, n"y a t'il pas plus simple?

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Envoyer un mail avec une pièce jointe :
    http://a-pellegrini.developpez.com/tutoriels/php/mail/
    Le fichier doit evidemment être sur le serveur.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 19
    Points : 10
    Points
    10
    Par défaut ca avance pas plus
    Je ne comprend pas bien la logique à suivre, j'me lance:
    avec un input file on demande au client le chemin cible de son fichier
    on le stock sur un répertoire cible sur le serveur
    (On ne peux pas stocker ca en variable ou fichier de session? j'ai dis une connerie la hein? j'ai encore jamis fait tout ça)
    le script le récupère et le renvoi à la bonne destination, et on supprime ensuite la pièce jointe?

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Un fichier transmis dans un formulaire est placé dans un repertoire temporaire et est supprimé à la fin du script : si tu envoies le mail dans la foulée du formulaire, tu n'as pas besoin de stocker/supprimer le fichier.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 19
    Points : 10
    Points
    10
    Par défaut aaaaaaaa
    j'me suis fais la réflexion a moi-même aussi à 'instant.
    Bon maintenant que j'ai compris comment ça marché, je comprend toujours pas pourquoi ça marche pas chez moi, j'ai pas quelque chose à débloquer au niveau de mon serveur? une option de derrière les fagos à activer, un htacces? Je sais pas

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Étant donné que tu as retiré ton code et que tu ne nous dis pas ce qui ne marche pas ...

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 19
    Points : 10
    Points
    10
    Par défaut tres juste,
    oh, le développement, c'est une grande part de mague... lol

    on reprend, voiçi le code html:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
             	<form method="post" action="envoi_mail_recrutement_piece_jointe.php"envoi_mail.php" >
                <table class="formulaire_recrutement">
                	<tr>
                    	 <td ><strong>Civilité:</strong> </td>
     
                    	 <td id="bouton_radio_recrutement"> 
                        		<input width="20px" type="radio" name="civilite" value="Mme">Mme
                        		<input  type="radio" name="civilite" value="Mlle">Mlle
    							<input  type="radio" name="civilite" value="Mr">Mr
                         </td>								
                    </tr>
     
                    <tr> <td><strong>Nom:</strong></td> <td> <input class="largeur_champ_formulaire_recrutement" type="text" name="nom" /> </td> </tr>
     
                    <tr> <td><strong>Email:</strong></td> <td> <input class="largeur_champ_formulaire_recrutement" type="text" name="email" /> </td> </tr>
     
                    <tr> <td><strong>CV:</strong></td> <td> <input class="largeur_champ_formulaire_recrutement" type="file" name="fichier_cv" /> </td> </tr>
     
                    <tr> <td><strong>Message:</strong></td> <td> <textarea  class="largeur_champ_formulaire_recrutement" id="message_recrutement" type="text" name="message"> </textarea> </td> </tr>
     
                    <tr> <td colspan="2" align="center"> <input value="Envoyer" type="submit" /> </td> </tr>
             	</table>
               </form>
    et voila mon code php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    <?php
    // To
    $to = 'truc@server.com';
     
    // Subject
    $subject = 'Developpez.com - Test Mail';
     
    // clé aléatoire de limite
    $boundary = md5(uniqid(microtime(), TRUE));
     
    // Headers
    $headers = 'From: Adrien Pellegrini <mail@server.com>'."\r\n";
    $headers .= 'Mime-Version: 1.0'."\r\n";
    $headers .= 'Content-Type: multipart/mixed;boundary='.$boundary."\r\n";
    $headers .= "\r\n";
     
    // Message
    $msg = 'This is a multipart/mixed message.'."\r\n\r\n";
     
    // Texte
    $msg .= '--'.$boundary."\r\n";
    $msg .= 'Content-type:text/plain;charset=utf-8'."\r\n";
    $msg .= 'Content-transfer-encoding:8bit'."\r\n";
    $msg .= 'Un message avec une pièce jointe.'."\r\n";
     
    // Pièce jointe
    $file_name = "'".$_POST['fichier_cv']."'";
    if (file_exists($file_name))
    {
    	$file_type = filetype($file_name);
    	$file_size = filesize($file_name);
     
    	$handle = fopen($file_name, 'r') or die('File '.$file_name.'can t be open');
    	$content = fread($handle, $file_size);
    	$content = chunk_split(base64_encode($content));
    	$f = fclose($handle);
     
    	$msg .= '--'.$boundary."\r\n";
    	$msg .= 'Content-type:'.$file_type.';name='.$file_name."\r\n";
    	$msg .= 'Content-transfer-encoding:base64'."\r\n";
    	$msg .= $content."\r\n";
    }
    else echo $_POST['fichier_cv'];
     
     
    // Fin
    $msg .= '--'.$boundary."\r\n";
     
    // Function mail()
    mail($to, $subject, $msg, $headers);
    ?>
    ça envoi le message, certes, mais pas de pièce jointe
    et encore merci de votre patience

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    C'est $_FILES pas $_POST et il ne faut pas confondre "tmp_name" qui est un nom dans le repertoire temporaire et "name" le nom d'origine du fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $file_name = $_FILES['fichier_cv']['tmp_name'];
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $msg .= 'Content-type:'.$file_type.';name='.$_FILES['fichier_cv']['name']."\r\n";

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    j'ai appliqué les changemant suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    // Pièce jointe
    $file_name = $_FILES['fichier_cv']['tmp_name'];
    if (file_exists($file_name))
    {
    	$file_type = filetype($file_name);
    	$file_size = filesize($file_name);
     
    	$handle = fopen($file_name, 'r') or die('File '.$file_name.'can t be open');
    	$content = fread($handle, $file_size);
    	$content = chunk_split(base64_encode($content));
    	$f = fclose($handle);
     
    	$msg .= '--'.$boundary."\r\n";
    	$msg .= 'Content-type:'.$file_type.';name='.$_FILES['fichier_cv']['name']."\r\n";
     
    	$msg .= 'Content-transfer-encoding:base64'."\r\n";
    	$msg .= $content."\r\n";
    }
    Et ça ne fonctionne pas.
    lorsque l'on utlisse la méthode post sur un formulaire, php place bien notre piece jointe dans une variable $_FILES?

    je ne vois pas d'ou provient l'ereur, je ne peux meme pas afficher le nom de ce fichier stocké par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $_FILES['fichier_cv']['name'];
    Une suggestion?

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il manque enctype="multipart/form-data" dans ton <form>

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    C'est mieux en effet, je reçois une pièce jointe. Mais elle est vide. je pense utiliser un pigeon voyageur, j'y gagnerais en temps

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Contrôle ce que contiennent tes variables $file_size et $content

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    voila ce que j'obtient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    This is a multipart/mixed message. --cafb85690f46008e24a7fb90b6afbeea Content-type:text/plain;charset=utf-8 Content-transfer-encoding:8bit Un message avec une pièce jointe. --cafb85690f46008e24a7fb90b6afbeea Content-type:file;name=essaidsvsdv.txt Content-transfer-encoding:base64 c2R2c2R2c2RmYmRmcWJkZg0KYg0KZGYNCmINCmRmDQpiDQpmc2QNCmINCmZkcw0KDQpiDQpzZGY= --cafb85690f46008e24a7fb90b6afbeea
    mon fichier a bien une taille, le type de fichier est file, je ne comprend pas, le fichier semble bien transmettre des donnés, mais je ne reçois rien

Discussions similaires

  1. Fonction mail, la pièce jointe n'apparaît pas
    Par BCPJulien dans le forum Langage
    Réponses: 1
    Dernier message: 01/06/2011, 09h18
  2. Fonction mail avec pièce jointe
    Par yamatoshi dans le forum Langage
    Réponses: 1
    Dernier message: 30/04/2010, 21h52
  3. fonction mail() avec pièce jointe
    Par ballantine's dans le forum Langage
    Réponses: 5
    Dernier message: 11/03/2010, 14h43
  4. [Mail] Fonction mail et pièce jointe
    Par john smith dans le forum Langage
    Réponses: 5
    Dernier message: 27/04/2006, 10h17
  5. [Mail] Fonction mail() et pièce jointe
    Par allyson dans le forum Langage
    Réponses: 16
    Dernier message: 09/11/2005, 15h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo