Discussion: Envoyer un email avec attaché [PHP 5.3]

  1. #1
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    mars 2004
    Messages
    3 522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2004
    Messages : 3 522
    Points : 1 265
    Points
    1 265

    Par défaut Envoyer un email avec attaché

    Bonjour à tous,

    J'aimerais envoyer un email avec un attaché, l'email est correctement envoyé, mais l'attaché n'est pas présent.

    Voici le code qui concerne l'attaché :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    //=====Lecture et mise en forme de la pièce jointe.
        $fichier   = fopen($_SESSION['$path'],"r");
        $attachement = fread($fichier, filesize($_SESSION['$path']));
        $attachement = chunk_split(base64_encode($attachement));
        fclose($fichier);
        $message .= "Content-Type: {\"application/octet-stream\"};\n" . " name=\"$fichier\"\n" . 
        "Content-Disposition: attachment;\n" . " filename=\"$fichier\"\n" . 
        "Content-Transfer-Encoding: base64\n\n" . $attachement . "\n\n";
        $message .= "--{$mime_boundary}\n";
        //==========
    ?>
    Je n'ai aucune erreur lors de l'envoi, mais pas d’attaché. J'ai l'impression que l'attaché est dans le mail :

    Content-Type: {"application/octet-stream"}; name="Resource id #8" Content-Disposition: attachment; filename="Resource id #8" Content-Transfer-Encoding: base64 /9j/4AAQSkZJRgABAQEAtAC0AAD/4TlMRXhpZgAATU0AKgAAAAgACwEPAAIAAAAKAAAIngEQAAIA AAAJAAAIqAESAAMAAAABAAEAAAExAAIAAAAKAAAIsgEyAAIAAAAUAAAIvAITAAMAAAABAAIAAIdp AAQAAAABAAAI0MSlAAcAAADQAAA3tMbSAAcAAABAAAA4hMbTAAcAAACAAAA4xOocAAcAAAgMAAAA kgAAAAAc6gAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAFBhbmFzb25pYwBETUMtRlozOAAAVmVyLjEuMCAgADIwMTA6MDk6MjMgMTA6 MTg6NTYAACaCmgAFAAAAAQAAEqqCnQAFAAAAAQAAErKIIgADAAAAAQACAACIJwADAAAAAQGQAACQ AAAHAAAABDAyMjGQAwACAAAAFAAAErqQBAACAAAAFAAAEs6RAQAHAAAABAECAwCRAgAFAAAAAQAA EuKSBAAFAAAAAQAAEuqSBQAFAAAAAQAAEvKSBwADAAAAAQAFAACSCAADAAAAAQAAAACSCQADAAAA AQAQAACSCgAFAAAAAQAAEvqSfAAHAAAklAAAEwKSkQACAAAAAzAwAACSkgACAAAAAzAwAACgAAAH a/r0enKdA8eeAYBHovivw/O73On65axg4iW7juDK8W1DDKZYmRHRhUYnDY+pF4mU1bSLilZ305XJ 396yi1GTV1drS+umNhgsFSVCOqu2m3fTXmUV0bbTaVk7J200/9k= --
    Je me demandais si il ne manquait pas quelques lignes de codes dans le bloc ci-dessus ?


    Merci d'avance et bonnes fêtes.

    bee

  2. #2
    Membre averti Avatar de shell13010
    Homme Profil pro
    Étudiant
    Inscrit en
    mars 2008
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : mars 2008
    Messages : 281
    Points : 307
    Points
    307

    Par défaut

    Session te retourne quoi?

    Car d'après se que je vois tu appels juste le chemin et a aucun moment tu appel le fichier...
    "Quelle prétention de prétendre que l'informatique est récente: Adam et Eve avaient déjà un Apple!"

  3. #3
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    février 2009
    Messages
    5 090
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2009
    Messages : 5 090
    Points : 17 776
    Points
    17 776

    Par défaut

    Bonsoir.

    Je relève déjà une erreur dans l'entête du mail :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $message .= "Content-Type: {\"application/octet-stream\"};\n" . " name=\"$fichier\"\n"
    Ici $fichier n'est pas le nom du fichier

    Pareil ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Content-Disposition: attachment;\n" . " filename=\"$fichier\"\n"
    Après le content-type aussi lui ne me semble pas correcte. Là ton mail est composé de plusieurs éléments avec chacun leur type MIME respectif (le corps du mail et le fichier attaché ont deux MIME-type distincts). Et de mémoire t'as un type MIME "multipart/mixed" qui permet de définir une suite d'éléments.

    Tu as un exemple un moment donné dans le man PHP : http://php.net/manual/fr/function.mail.php

    Il me semble qu'il existe aussi une lib PEAR de plus haut niveau pour gérer ce genre de chose plus simplement. D'ailleurs le man le mentionne également :

    Citation Envoyé par man PHP
    Si vous prévoyez d'envoyer des mails HTML ou autrement plus complexes, il est recommandé d'utiliser le paquet PEAR » PEAR::Mail_Mime.
    Et comme je suis gentil, je te donne même la doc vers cette lib : http://pear.php.net/package/Mail_Mime/docs

    Bonne année,
    Idriss

  4. #4
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    mars 2004
    Messages
    3 522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2004
    Messages : 3 522
    Points : 1 265
    Points
    1 265

    Par défaut

    Bonsoir à vous deux,

    Merci pour vos réponses.

    J'ai finalement repris tout de zéro et cela fonctionne maintenant très bien.

    @Idriss: je prends bonne note de tes remarques (PEAR...).

    Je vous remercie encore et je vous souhaite une bonne année.

    bee

  5. #5
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    février 2009
    Messages
    5 090
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2009
    Messages : 5 090
    Points : 17 776
    Points
    17 776

    Par défaut

    J'ai finalement repris tout de zéro et cela fonctionne maintenant très bien.
    Super

    Mais c'est dommage de ne pas indiquer ta solution ici, ça pourrait toujours servir

    A+

  6. #6
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    mars 2004
    Messages
    3 522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2004
    Messages : 3 522
    Points : 1 265
    Points
    1 265

    Par défaut

    Citation Envoyé par ok.Idriss Voir le message
    Super

    Mais c'est dommage de ne pas indiquer ta solution ici, ça pourrait toujours servir

    A+
    Bien sûr, voici le code demandé :

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    <?php
        session_start();
     
        // email fields: to, from, subject, and so on
        $to = "monemail@gmail.com";
        $subject ="My subject";
        $from = $_POST['netID']."@gmail <".$_POST['netID']."@gmail.com>";
         $message = '<div style="text-align:center";><img id="logo_padi" width="102px" height="120px"  /></div>';
        $message.=  "<p><b>".$_POST['matricule'] . " " . $_POST['prenom'] . " " . $_POST['nom'] . " (" . $_POST['netID']."</b>) a laissé ce message </p>";
        $message.= "\n\n";
        $message.= "<p>Type de problème : <b>" . $_POST['type_probleme']."</b></p>";
        $message.= "<p>Description du problème : </p>";
        $message.= "<p>-----------------Début---------------------</p>";
        $message.= "<b>".$_POST['message']."</b>";
        $message.= "<p>------------------Fin----------------------</p>";
        $message.= "<p>Situation géographique du problème : </p>";
        $message.= "<p>Campus :<b> " . $_POST['campus'] . "</b> - Faculté : <b>" . $_POST['faculte']. "</b> - Local : <b>" . $_POST['local']. "</b> - Nom du PC : <b>". $_POST['nom_PC']."</b></p>";
         if(isset($_SESSION['$path']))
        {
        $fichier_joint = explode('\\',$_POST["piece_jointe"]);
        $message.= "<p>Pièce jointe : <a href='padi.ac.be/help/upload/".$_POST['piece_jointe']."'>padi.be/help/upload/".$fichier_joint[sizeof($fichier_joint)-1]."</a></p>";
        }
        $headers = "From: $from";
        if(isset($_SESSION['$path']))
        {
        $path = $_SESSION['$path'];
        }
     
        // boundary
        $semi_rand = md5(time());
        $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
     
        // headers for attachment
        $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\"";
     
        // multipart boundary
        $message = "This is a multi-part message in MIME format.\n\n" . "--{$mime_boundary}\n" . "Content-Type: text/html; charset=\"UTF-8\"\n" . "Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n";
        $message .= "--{$mime_boundary}\n";
         if(isset($_SESSION['$path']))
        {
        // preparing attachments
        $file = fopen($path,"rb");
        $data = fread($file,filesize($path));
        fclose($file);
        $data = chunk_split(base64_encode($data));
        $message .= "Content-Type: {\"application/octet-stream\"};\n" . " name=\"$path\"\n" . "Content-Disposition: attachment;\n" . " filename=\"$path\"\n" .     "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
        $message .= "--{$mime_boundary}\n";
        }
        // send
     
        $ok = @mail($to, $_POST['campus']." ".$_POST['faculte']." ".$_POST['local']." ".$_POST['type_probleme'], $message, $headers);
        unset($_SESSION['$path']);
        print_r($_SESSION);
        if ($ok)
        {
            echo "<p>mail sent to $to!</p>";
        } else
        {
            echo "<p>mail could not be sent!</p>";
        }
     
    ?>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Envoyer un email avec csv attaché via sendmail
    Par swissmade dans le forum Ruby
    Réponses: 1
    Dernier message: 19/07/2011, 15h55
  2. Envoyer un email avec Outlook
    Par moumicha dans le forum Access
    Réponses: 17
    Dernier message: 19/07/2006, 09h58
  3. Envoyer un Email avec Outlook à partir d'access
    Par pilotcoater dans le forum Access
    Réponses: 1
    Dernier message: 13/03/2006, 20h04
  4. [VBA]envoyer un email avec un fichier joint à partir d'excel
    Par mcay dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 21/12/2005, 10h21
  5. Réponses: 5
    Dernier message: 12/12/2005, 22h49

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