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 :

[Mail] E-mail avec fichier joint


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Février 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2005
    Messages : 63
    Points : 57
    Points
    57
    Par défaut [Mail] E-mail avec fichier joint
    Bonjour tout le monde!
    J'ai un petit probleme et j'espere que vous pourrez m'aider
    Voila j ai besoin d'envoyer des email avec en piece jointe une facture en pdf.
    Et ca marche pas!
    Le mail et le fichier joint sont envoyé mais les accents disparaissent!

    J'ai essayer d autre fonction que j ai trouver sur le net mais celles-ci fonctionnent encore moins bien ( a mon avis j ai la poisse ^^)
    Ci dessous le detail de ma fonction qui marche le mieu

    $attachement est du style : "./facture.pdf"

    $message est un fichier texte banal avec des \n et \r pour les sauts à la ligne
    $destinataire est une adresse mail

    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    function envoi($message,$destinataire,$attachement)
    {
    //----------------------------------
    // Construction de l'entête
    //----------------------------------
    // On choisi généralement de construire une frontière générée aleatoirement
    // comme suit. (REM: je n'en connais pas la raison profonde)
    $boundary = "-----=".md5(uniqid(rand()));
     
    // Ici, on construit un entête contenant les informations
    // minimales requises.
    // Version du format MIME utilisé
    $header = "MIME-Version: 1.0\r\n";
    // Type de contenu. Ici plusieurs parties de type different "multipart/mixed"
    // Avec un frontière définie par $boundary
    $header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
    $header .= "\r\n";
     
    //--------------------------------------------------
    // Construction du message proprement dit
    //--------------------------------------------------
     
    // Pour le cas, où le logiciel de mail du destinataire
    // n'est pas capable de lire le format MIME de cette version
    // Il est de bon ton de l'en informer
    // REM: Ce message n'apparaît pas pour les logiciels sachant lire ce format
     
     
    //---------------------------------
    // 1ère partie du message
    // Le texte
    //---------------------------------
    // Chaque partie du message est séparé par une frontière
    $msg = "--$boundary\r\n";
     
     
    // Et pour chaque partie on en indique le type
    $msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n";
    // Et comment il sera codé
    $msg .= "Content-Transfer-Encoding:8bit\r\n";
    // Il est indispensable d'introduire une ligne vide entre l'entête et le texte
    $msg .= "\r\n";
    $msg.= "--$boundary\r\n";
    $msg.=$message. "\r\n";;
     
     
     
    //---------------------------------
    // 2nde partie du message
    // Le fichier
    //---------------------------------
    // Tout d'abord lire le contenu du fichier
    $file = $attachement;
    $fp = fopen($file, "rb");   // b c'est pour les windowsiens
    $attachment = fread($fp, filesize($file));
    fclose($fp);
     
    // puis convertir le contenu du fichier en une chaîne de caractère
    // certe totalement illisible mais sans caractères exotiques
    // et avec des retours à la ligne tout les 76 caractères
    // pour être conforme au format RFC 2045
    $attachment = chunk_split(base64_encode($attachment));
     
     
     
    // Ne pas oublier que chaque partie du message est séparé par une frontière
    $msg .= "--$boundary\r\n";
    // Et pour chaque partie on en indique le type
    $msg .= "Content-Type: application/pdf; name=\"Facture.pdf\"\r\n";
    // Et comment il sera codé
    $msg .= "Content-Transfer-Encoding: base64\r\n";
    // Petit plus pour les fichiers joints
    // Il est possible de demander à ce que le fichier
    // soit si possible affiché dans le corps du mail
    $msg .= "Content-Disposition: inline; filename=\"$file\"\r\n";
    // Il est indispensable d'introduire une ligne vide entre l'entête et le texte
    $msg .= "\r\n";
    // C'est ici que l'on insère le code du fichier lu
    $msg .= $attachment . "\r\n";
    $msg .= "\r\n\r\n";
     
    // voilà, on indique la fin par une nouvelle frontière
    $msg .= "--$boundary--\r\n";
     
    $expediteur   = "test@test.com";
    $reponse      = $expediteur;
     
    return mail($destinataire, "test.com facture", $msg, "Reply-to: $reponse\r\nFrom: $expediteur\r\n".$header);
     
    }
    Je pense que c'est une histoire de charset du message
    j ai tester avec us-ascii et utf-8 mais ca ne change rien.
    Que dois je faire??
    Marre de me prendre la tete sur un truc qui est surement tout bete!!

    Merci beaucoup

    Ke le tigre soit en toi
    tiger63

  2. #2
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Février 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2005
    Messages : 63
    Points : 57
    Points
    57
    Par défaut precision apres test
    rebonjour tout le monde!!

    Bon j ai fait quelque test supplementaire et le probleme viens de la partie message, pas de la partie fichier joint car en enlevant ce dernier les accent n 'apparaissent po!

    voili voilou


    tiger63
    Ke le tigre soit en toi

  3. #3
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Février 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2005
    Messages : 63
    Points : 57
    Points
    57
    Par défaut Merci pour vos reponses si nombreuses lool
    Bon bin pour ceux ki ont lutter ou qui vont lutter voici une fonction mail qui marche
    pourquoi je ne sais pas .
    probablement une histoire d'espace ou de saut de ligne.
    J ai tester plein de petite chose et au final ca a marcher donc....

    voili voilou

    ci dessous la fonction qui marche:

    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    function envoi($message,$destinataire,$attachement)
    {
     
    //----------------------------------
    // Construction de l'entête
    //----------------------------------
    // On choisi généralement de construire une frontière générée aleatoirement
    // comme suit. (REM: je n'en connais pas la raison profonde)
    $boundary = "-----=".md5(uniqid(rand()));
     
    // Ici, on construit un entête contenant les informations
    // minimales requises.
    // Version du format MIME utilisé
    $header = "MIME-Version: 1.0\n";
    // Type de contenu. Ici plusieurs parties de type different "multipart/mixed"
    // Avec un frontière définie par $boundary
    $header .= "Content-Type: multipart/mixed";
    $header.="boundary=\"$boundary\"\n";
    $header .= "\n";
     
    //--------------------------------------------------
    // Construction du message proprement dit
    //--------------------------------------------------
     
    // Pour le cas, où le logiciel de mail du destinataire
    // n'est pas capable de lire le format MIME de cette version
    // Il est de bon ton de l'en informer
    // REM: Ce message n'apparaît pas pour les logiciels sachant lire ce format
     
     
    //---------------------------------
    // 1ère partie du message
    // Le texte
    //---------------------------------
    // Chaque partie du message est séparé par une frontière
    $msg = "--$boundary\r\n";
     
     
    // Et pour chaque partie on en indique le type
    $msg .= "Content-Type: text/HTML; charset=iso-8859-1 format=flowed\n";
    // Et comment il sera codé
    $msg .= "Content-Transfer-Encoding:quoted-printable\n";
    // Il est indispensable d'introduire une ligne vide entre l'entête et le texte
    $msg .= "\r\n";
    $msg.= "--$boundary\r\n";
    $msg.=$message. "\r\n";
     
     
     
    //---------------------------------
    // 2nde partie du message
    // Le fichier
    //---------------------------------
    // Tout d'abord lire le contenu du fichier
    $file = $attachement;
    $fp = fopen($file, "rb");   // b c'est pour les windowsiens
    $attachment = fread($fp, filesize($file));
    fclose($fp);
     
    // puis convertir le contenu du fichier en une chaîne de caractère
    // certe totalement illisible mais sans caractères exotiques
    // et avec des retours à la ligne tout les 76 caractères
    // pour être conforme au format RFC 2045
    $attachment = chunk_split(base64_encode($attachment));
     
     
     
    // Ne pas oublier que chaque partie du message est séparé par une frontière
    $msg .= "--$boundary\r\n";
    // Et pour chaque partie on en indique le type
    $msg .= "Content-Type: application/pdf; name=\"Facture.pdf\"\r\n";
    // Et comment il sera codé
    $msg .= "Content-Transfer-Encoding: base64\r\n";
    // Petit plus pour les fichiers joints
    // Il est possible de demander à ce que le fichier
    // soit si possible affiché dans le corps du mail
    $msg .= "Content-Disposition: inline; filename=\"$file\"\r\n";
    // Il est indispensable d'introduire une ligne vide entre l'entête et le texte
    $msg .= "\r\n";
    // C'est ici que l'on insère le code du fichier lu
    $msg .= $attachment . "\r\n";
    $msg .= "\r\n\r\n";
     
    // voilà, on indique la fin par une nouvelle frontière
    $msg .= "--$boundary--\r\n";
     
    $expediteur2   = "contact@contact.com";
    $reponse2    = $expediteur;
     
    return mail($destinataire, "Facture", $msg, "Reply-to: $reponse\r\nFrom: $expediteur\r\n".$header);
     
    }
    tchao tchao

    KE le tigre soit en toi

    tiger63!!

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/03/2009, 19h21
  2. [Librairies] Envoyer mail avec fichier joint
    Par TicTacToe dans le forum Bibliothèques et frameworks
    Réponses: 24
    Dernier message: 11/05/2006, 17h55
  3. envoi mail avec fichier joint
    Par dietrich dans le forum API standards et tierces
    Réponses: 14
    Dernier message: 28/02/2006, 14h42
  4. [c#] Envoi d'un mail avec fichier joint
    Par macfred dans le forum ASP.NET
    Réponses: 8
    Dernier message: 05/12/2005, 11h15
  5. Réponses: 6
    Dernier message: 17/11/2005, 14h39

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