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] Fonction Mail - Soucis de Charset


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Points : 89
    Points
    89
    Par défaut [Mail] Fonction Mail - Soucis de Charset
    Bonjour,

    J'ai actuellement un soucis de charset lors d'un envoi automatique de mail avec la fonction mail()
    Je suppose que j'ai du oublier quelque chose à quelque part, sachant que j'ai le même problème sur 2 hébergeurs différents, ça vient de moi ^^

    Voici donc mon formulaire html :
    J'ai remplacé les portions inutiles du code par des [...].

    Code html : 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
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
      <head>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
     
        [...]
     
      </head>
     
      <body>
     
       [...]
          <form action="contact.php" method="post" id="myForm">
     
            <fieldset>
     
              <legend>Formulaire de Contact</legend>
     
              <div class="espacement"></div>
     
              <p class="deux_colonnes">
                <label for="nom">Nom :</label>
                <input type="text" id="nom" name="nom" class="validate['required']"/>
              </p>
     
              <p class="deux_colonnes">
                <label for="prenom">Prénom :</label>
                <input type="text" id="prenom" name="prenom" class="validate['required']"/>
              </p>
     
              <p class="deux_colonnes">
                <label for="mail">Adresse E-Mail :</label>
                <input type="text" id="mail" name="mail" class="validate['required','length[5,-1]','email']" />
              </p>
     
              <p class="deux_colonnes">
                <label for="message">Message :</label>
                <textarea id="message" name="message" rows="10" cols="40" class="validate['required']"></textarea>
              </p>
     
              <p class="deux_colonnes">
                <label for="securite">Sécurité, combien font 2+3 ? :</label>
                <input type="text" id="securite" name="securite" class="validate['required','number','spamcheck']"/>
              </p>
     
              <p class="deux_colonnes">
                <input type="submit" value="envoyer" />
              </p>
     
            </fieldset>
     
          </form>
     
        [...]
     
      </body>
     
    </html>

    Et voici le php :

    Code php : 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
     
    <?php
    [...]
      // Si aucun problème et aucun cookie créé, on construit le message et on envoie l'e-mail
      else
      {
        /* Destinataire (votre adresse e-mail) */
        $to = '**********************';
     
        /* Construction du message */
        $msg  = 'Bonjour,'."\r\n\r\n";
        $msg .= 'Ce mail a été envoyé depuis la page CONTACT par '.$prenom.' '.$nom."\r\n\r\n";
        $msg .= 'Voici le message :'."\r\n";
        $msg .= '***************************'."\r\n";
        $msg .= $message."\r\n";
        $msg .= '***************************'."\r\n";
     
        /* En-têtes de l'e-mail */
        $headers = 'From: '.$nom.' '.$prenom.' <'.$expediteur.'>'."\r\n\r\n";
        $headers .='Content-Type: text/html; charset="utf-8"'."\n";
     
        /* Envoi de l'e-mail */
        if(mail($to, 'Contact - *******', $msg, $headers))
        {
          header("location:succes.html");
        }
        else
        {
          header("location:echec.html");
        }
      }
    }
    ?>

    Le rendu du mail donne ça :

    Content-Type: text/html; charset="utf-8"


    Bonjour,

    Ce mail a été envoyé depuis ************ par Serj A l'Ombre du temple de Dalriel

    Voici le message :
    ***************************
    é"'(-è_çà à à à à à à à Ã
    ***************************
    Le content-type est en fait inclus directement dans le corps du message... Ce qui semble à mon avis être une erreur... Pourtant, j'estime ne rien avoir fait motivant ce soucis :p

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 498
    Points : 461
    Points
    461
    Par défaut
    et avec un charset="iso-8859-1" ??
    Ou alors tu encodes ta chaine à l'aide de utf8_encode()!

  3. #3
    Membre régulier Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Points : 89
    Points
    89
    Par défaut
    et avec un charset="iso-8859-1" ??
    Ca ne change absolument rien

    Ou alors tu encodes ta chaine à l'aide de utf8_encode()!
    Le truc, c'est que logiquement, les valeurs postées sont toutes sensées être en UTF8, non ?
    Le charset de mon HTML est bien UTF8... L'encodage des fichiers est aussi utf8.

    Je vais tester et j'éditerais en fonction du résultat.

    EDIT

    Ca n'a rien changé... Sauf que les caractères "spéciaux" sont d'une autre nature maintenant...
    M'enfin ça reste des caractères foireux

    Content-Type: text/html; charset="utf-8"


    Bonjour,

    Ce mail a été envoyé depuis*************** par Angela Elwinder

    Voici le message :
    ***************************
    &é"'(-è_çà)
    ***************************

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 498
    Points : 461
    Points
    461
    Par défaut
    Je n'avais pas lu ton premier post jusqu'au bout! En effet le content-type dans le corps du message indique un soucis!! Comme ça je dirai peut-être la gestion des apostrophes dans tes champs variables. Essaies de générer un mail sans apostrophe...

  5. #5
    Membre régulier Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Points : 89
    Points
    89
    Par défaut
    Voilà un message sans apostrophe.
    Ca n'a rien changé, mais ça n'a pas empiré =)

    On sait donc que ça ne vient pas des apostrophes

    Content-Type: text/html; charset="utf-8"


    Bonjour,

    Ce mail a été envoyé depuis ******** par Angela Elwinder

    Voici le message :
    ***************************
    un email sans apostrophe

    voilà , y a même des accents en prime
    ***************************

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 498
    Points : 461
    Points
    461
    Par défaut
    Et avec ta ligne transformée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $headers = 'From: '.$nom.' '.$prenom.' <'.$expediteur.'>'."\r\n\r\n".'Content-Type: text/html; charset="utf-8"'."\n";

  7. #7
    Membre régulier Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Points : 89
    Points
    89
    Par défaut
    Ca n'a absolument rien changé.
    Le content-type reste dans le corps du message...

    J'ai cru à un moment que c'était parce que j'avais entouré le utf-8 par des doubles quotes
    j'ai donc remplacé

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $headers .='Content-Type: text/html; charset="utf-8'"."\n";
    par
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $headers .='Content-Type: text/html; charset=utf-8'."\n";

    Ca n'a rien changé...
    Je ne comprends pas, pourtant j'ai suivi le cours ici : http://a-pellegrini.developpez.com/tutoriels/php/mail/

    Code php : 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
     
     
    // To
    $to = 'truc@server.com';
     
    // Subject
    $subject = 'Developpez.com - Test Mail';
     
    // Headers
    $headers = 'Mime-Version: 1.0'."\r\n";
    $headers .= 'Content-type: text/html; charset=utf-8'."\r\n";
    $headers .= "\r\n";
     
    // Message
    $msg = '<strong>Developpez.com</strong> - Message du mail ...';
     
    // Function mail()
    mail($to, $subject, $msg, $headers);

    Je sais que c'est pas viril, mais j'vais me mettre à pleurer si ça continue ^^

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 498
    Points : 461
    Points
    461
    Par défaut
    Je ne comprends pas non plus! Sur ce que tu me montres, tout est bon je l'ai testé chez moi!
    Dernier test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mail("tonadresse@tondomaine", "Sujet", "Essai avec des accents éèàë", $headers);
    simplement pour voir comment ton Content-Type se retrouve dans le corps du message!

  9. #9
    Membre régulier Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Points : 89
    Points
    89
    Par défaut
    Je viens de tester en modifiant et en rajoutant ça

    Code php : 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
     
     /* Destinataire (votre adresse e-mail) */
        $to = 'contact@web-innovation.fr';
     
        $headers = 'From: '.$nom.' '.$prenom.' <'.$expediteur.'>'."\r\n";
        $headers .= 'Mime-Version: 1.0'."\r\n";
        $headers .= 'Content-type: text/html; charset=utf-8'."\r\n";
        $headers .= "\r\n";
     
     
        /* Construction du message */
        $msg  = 'Bonjour,'."\r\n\r\n";
        $msg .= 'Ce mail a été envoyé depuis www.web-innovation.fr par '.$prenom.' '.$nom."\r\n\r\n";
        $msg .= 'Voici le message :'."\r\n";
        $msg .= '***************************'."\r\n";
        $msg .= $message."\r\n";
        $msg .= '***************************'."\r\n";
     
        /* En-têtes de l'e-mail */
        /*$headers = 'From: '.$nom.' '.$prenom.' <'.$expediteur.'>'."\r\n\r\n"."\n";
        $headers .='Content-Type: text/html; charset=utf-8'."\n";*/
     
        /* Envoi de l'e-mail */
        if (mail($to, $sujet, $msg, $headers))
        {
          echo 'E-mail envoyé avec succès';
        }
        else
        {
          echo 'Erreur d\'envoi de l\'e-mail';
        }

    Il n'y a plus du tout de corps du message.
    Le message est vide...

    Quelqu'un a une corde ?

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 498
    Points : 461
    Points
    461
    Par défaut
    Fais le test que je t'ai donné! Courage, on avance!

  11. #11
    Membre régulier Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Points : 89
    Points
    89
    Par défaut
    Avec ton test donc,

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $to = 'contact@web-innovation.fr';
     
        $headers = 'From: '.$nom.' '.$prenom.' <'.$expediteur.'>'."\r\n";
        $headers .= 'Content-type: text/html; charset=utf-8'."\r\n";
        $headers .= "\r\n";
     
        /* Envoi de l'e-mail */
        //if (mail($to, $sujet, $msg, $headers))
        mail($to, "Sujet", "Essai avec des accents éèàë", $headers);

    Le résultat

    Essai avec des accents éèà ë
    Mais y a du mieux... il n'y a plus le content type dans le corps du message...

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 498
    Points : 461
    Points
    461
    Par défaut
    En tout les cas, ton code fonctionne chez moi avec charset=iso-8859-1!

  13. #13
    Membre régulier Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Points : 89
    Points
    89
    Par défaut
    Eh beh chez moi non...

    J'vais vraiment pleurer

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 498
    Points : 461
    Points
    461
    Par défaut
    Le petit test avec charset=iso-8859-1 ne fonctionne pas non plus?!? ça te donne quoi?

  15. #15
    Membre régulier Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Points : 89
    Points
    89
    Par défaut
    Ca donne ça

    éèà ôöêëâä
    J'me demande si c'est pas le "horde" de mon hébergeur qui déconne.
    J'vais tester de m'envoyer le mail sur mon gmail plutôt

    EDIT

    Ca marche sur GMAIL...

    J'hallucine...
    En gros... c'est le horde de mon hébergeur qui chie dans l'pâté...

    J'suis dégoutéééééé !

    Bon, ben ça semble résolu...
    Merci ^^

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 498
    Points : 461
    Points
    461
    Par défaut
    Ok, sinon j'ai trouvé une discussion où quelqu'un recevait des données d'un formulaire en flash (UTF-8), il utilisait la fonction utf8_decode pour que l'affichage soit correct... une piste peut-être! Bon courage!

  17. #17
    Membre régulier Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Points : 89
    Points
    89
    Par défaut
    Je confirme donc que le webmail de mon hébergeur ne supporte pas utf-8...

    Donc je dois ré-encoder mes pages html (qui envoient un formulaire), modifier l'accentuation...

    Merci fucce

  18. #18
    Membre régulier Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Points : 89
    Points
    89
    Par défaut
    Eh beh non, c'était une fausse alerte...
    Même en iso-8859-1... ça ne marche pas...

    Code php : 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
     
    /* Destinataire (votre adresse e-mail) */
        $to = 'contact@web-innovation.fr';
     
        /* En-têtes de l'e-mail */
        $headers = 'From: '.$nom.' '.$prenom.' <'.$expediteur.'>'."\r\n";
        $headers .= 'Content-type: text/html; charset=iso-8859-1'."\r\n";
        $headers .= "\r\n";
     
     
        /* Construction du message */
        $msg  = 'Bonjour,'."\r\n\r\n";
        $msg .= 'Ce mail a été envoyé depuis ****** par '.$prenom.' '.$nom."\r\n\r\n";
        $msg .= 'Voici le message :'."\r\n";
        $msg .= '***************************'."\r\n";
        $msg .= $message."\r\n";
        $msg .= '***************************'."\r\n";
     
        /* Envoi de l'e-mail */
        if (mail($to, $sujet, $msg, $headers))
        {
          echo 'E-mail envoyé; avec succés';
        }
        else
        {
          echo 'Erreur d\'envoi de l\'e-mail';

    Les caractères accentués contenus dans $message foirent...
    Par contre ceux du script "a été envoyé" : aucun soucis...

    La page qui envoi le formulaire est cette fois en iso-8859-1... encodée en iso-8859-1...

    Ca m'gonfle ^^
    J'vois pas le soucis...

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/03/2009, 20h21
  2. [Mail] [fonction mail] Pièces jointes
    Par poussinphp dans le forum Langage
    Réponses: 2
    Dernier message: 30/12/2005, 13h15
  3. [Mail] Fonction mail() et le spam
    Par tonios dans le forum Langage
    Réponses: 1
    Dernier message: 12/12/2005, 23h51
  4. [Mail] Fonction mail() et pièce jointe
    Par allyson dans le forum Langage
    Réponses: 16
    Dernier message: 09/11/2005, 16h05
  5. Réponses: 5
    Dernier message: 29/10/2005, 17h44

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