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 :

Caractère accentué dans un e-mail [PHP 5.2]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2004
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : développeur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2004
    Messages : 481
    Par défaut Caractère accentué dans un e-mail
    Bonjour,

    J'utilise la fonction mail() pour envoyer des messages.
    Mon problème, c'est que les caractères accentués dans le sujet du message sont transformés en X.

    Exemple : Où s'est déroulée la fête ?
    devient dans la message reçu : OX s'est dXroulXe la fXte ?

    J'ai vérifié le code source du message, c'est bien
    subject: OX s'est dXroulXe la fXte

    Le problème est donc bien du côté serveur.

    Voici mon code :

    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
    if (get_magic_quotes_gpc())	{
    	$info_sujet = stripslashes($_POST['info_sujet']);
    	$information = stripslashes($_POST['information']);
    } else {
    	$info_sujet = $_POST['info_sujet'];
    	$information = $_POST['information'];
    }
    $boundary = "-----=".md5(uniqid(rand()));
    $header = "MIME-Version: 1.0\n";
    $header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\n";
    $header .= "\n";
    $msg = "Je vous informe que ceci est un message au format MIME 1.0 multipart/mixed.\n";
    $msg .= "--$boundary\n";
    $msg .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
    $msg .= "Content-Transfer-Encoding:8bit\n";
    $msg .= "\n";
    $msg .= "<html><head><title>Information</title></head><body>";
    ...
    $msg .= "</body></html>";
    $msg .= "\n\n";
    $msg .= "--$boundary--\n";
    $expediteur = "toto@toto.fr";
    mail($destinataire, $info_sujet, $msg,"From: $expediteur\n".$header);
    Le serveur est Redhat/Apache.

    Une idée ?

  2. #2
    Membre Expert Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Par défaut
    pour envoyer des e-mails complexes, utilise plutôt une librairie comme PHPMailer par exemple :
    http://jcrozier.developpez.com/tutor...eloppeurs/#LIV

  3. #3
    Membre émérite
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Par défaut
    Bonjour,

    avec comme ça :


  4. #4
    Membre éclairé
    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2004
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : développeur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2004
    Messages : 481
    Par défaut
    Citation Envoyé par syl2095 Voir le message
    Bonjour,

    avec comme ça :

    Le charset est pris en compte par ma variable $msg, qui correspond au corps du message.
    La fonction mail distingue bien le sujet et le corps du message.
    Donc, si j'ai bien compris, ça ne sert à rien de modifier le charset du corps, puisqu'il n'est pas pris par le sujet.

  5. #5
    Membre éclairé
    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2004
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : développeur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2004
    Messages : 481
    Par défaut
    Citation Envoyé par nosferapti Voir le message
    pour envoyer des e-mails complexes, utilise plutôt une librairie comme PHPMailer par exemple :
    http://jcrozier.developpez.com/tutor...eloppeurs/#LIV
    Est-ce que le fait d'avoir des caractères accentués dans le sujet du message peut-être considéré comme un message complexe ?
    Ce serait quand même un peu exagéré, je pense.

    Après quelques tests, je soupçonne en fait que ce soit le serveur de messagerie qui fasse cet encodage bizarre.

  6. #6
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 421
    Par défaut
    Le code que j'utilise et qui fonctionne avec des titres accentués :

    En haut de ma page j'indique l'entête
    header('Content-type: text/html; charset=iso-8859-1');

    Je ne mets pas de guillemets dans le charset
    "Content-Type: text/plain; charset=iso-8859-1\n";

    Si tu fais des tests en dur il faut que ta page soit encodée au même format qu'indiqué dans le charset.

    Cela fonctionne aussi en indiquantutf-8

    Mais pas impossible que ça vienne du serveur de messagerie.

    Quand je travaille en utf8 et que j'envoie un message chez free, si le sujet comporte des caractères accentués j'ai droit à des éà donc le navigateur affiche de l'iso. Mais si je récupère cet email via outlook express je récupère les caractères accentués originaux dans le sujet...

    Par contre si j'encode au format iso j'ai bien mes caractères accentués dans le sujet même sur le serveur de free.

  7. #7
    Membre éclairé
    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2004
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : développeur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2004
    Messages : 481
    Par défaut
    Mon problème, c'est que je voudrais que le sujet du message soit correctement orthographié à la réception, avec les caractères accentués.
    J'ai cherché un peu et j'ai trouvé la RFC2047, référencée dans la fonction mail() de php, et la fonction imap_8bit().

    En fait, mon codage devient donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $longueur = count($info_sujet_message) + 17;
    $nombre = $longueur/58 + 1;
    $chaine = "";
    for ($i=0;$i<$nombre;$i++) {
         $chaine .= "=?iso-8859-1?Q?".imap_8bit(substr($info_sujet_message, $i*58, 58))."?=";
    }
    mail($row['COURRIEL'], $chaine, $msg,"From: $expediteur\n".$header);
    Selon la RFC2047, la chaîne ne peut contenir que 75 caractères par ligne, d'où le calcul et la boucle que j'utilise.


    Quelques liens pour ceux qui sont intéressés :

    http://fr2.php.net/manual/fr/function.mail.php
    http://www.php.net/manual/fr/function.imap-8bit.php
    http://www.faqs.org/rfcs/rfc2047.html


    P.S. : si la fonction imap_8bit n'est pas disponible sur le serveur, on peut utiliser celle-ci (trouvée sur internet):

    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
        function QPencode($str) {
            $lines = preg_split("/\r\n/", $str);
            $out = '';
            foreach ($lines as $line) {
                $newpara = '';
                for ($j = 0; $j <= strlen($line) - 1; $j++) {
                    $char = substr ( $line, $j, 1 );
                    $ascii = ord ( $char );
                    if ( $ascii < 32 || $ascii == 61 || $ascii > 126 ) {
                        $char = '=' . strtoupper ( sprintf("%02X", $ascii ) );
                    }
                    if ( ( strlen ( $newpara ) + strlen ( $char ) ) >= 76 ) {
                        $out .= $newpara . "=\r\n";
                        $newpara = '';
                    }
                    $newpara .= $char;
                }
                $out .= $newpara;
            }
            return trim ($out);
        }

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

Discussions similaires

  1. [MySQL] Adresse mail avec caractère souligné dans la fonction mail
    Par pchartier dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 21/11/2011, 18h35
  2. Réponses: 0
    Dernier message: 13/07/2010, 16h20
  3. [AJAX] Caractères accentué pour envoi de mail
    Par julieng31 dans le forum AJAX
    Réponses: 3
    Dernier message: 04/02/2010, 00h32
  4. Réponses: 5
    Dernier message: 19/09/2007, 14h47

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