Charset des sujets (objet) des e-mails
Répondre à la discussion
Affichage des résultats 1 à 15 sur 15

Charset des sujets (objet) des e-mails



  1. #1
    uneautreterre

    Charset des sujets (objet) des e-mails


    ------

    Bonjour.

    Existe-t-il un moyen, lorsqu'on crée un message à partir d'une application web (typiquement faite en PHP) d'indiquer à un logiciel de messagerie le charset utilisé pour le sujet (et non le message, ça c'est fait dans l'entête HTTP) ?
    Je pose la question parce que Thunderbird (au moins lui) affiche les sujets en utilisant l'UTF-8, alors que les webmails que je connais reconnaissent très bien le charset et rendent correctement le sujet, qu'il soit e UTF-8 ou en ISO.
    Actuellement, pour rendre les sujets dans Thunderbird "corrects"je les j'envoie du coup en UTF-8, mais cela pourrait rendre le sujet mal affiché pour des systèmes attendant de l'ISO (si ça existe). Bref, la solution qui me parait la meilleure reste d'indiquer l'encodage, d'où ma question.

    Merci.

    -----

  2. #2
    Pauldair

    Re : Charset des sujets (objet) des e-mails

    Bonjour,

    Je n'ai jamais essayé, mais je tenterais de le faire via le CSS grâce à cette ligne:

    Code:
    @charset "nom du charset";

  3. #3
    uneautreterre

    Re : Charset des sujets (objet) des e-mails

    Du CSS dans du SMTP ? J'y crois pas trop !

  4. #4
    Pauldair

    Re : Charset des sujets (objet) des e-mails

    Citation Envoyé par uneautreterre Voir le message
    Du CSS dans du SMTP ? J'y crois pas trop !
    Comment crois-tu que les logiciels d'e-mail interprètent les messages complexes (images, graphiques, polices de caractères, etc) qui sont transmis aujourd'hui ?

    Ils interprètent simplement les codes HTML et CSS contenus dans le message.

    Le SMTP ou Simple Mail Transfer Protocol (protocole simple de transfert de courrier) est un protocole de communication, ça n'a rien à voir avec la mise en page d'un e-mail. Par analogie SMTP c'est la Poste et l'e-mail la lettre. Ce n'est pas la Poste qui rédige ton courrier, elle ne fait que l'acheminer.
    Il faut bien sûr respecter certaines règles, comme de mentionner une adresse et coller le timbre sur l'enveloppe...

  5. A voir en vidéo sur Futura
  6. #5
    uneautreterre

    Re : Charset des sujets (objet) des e-mails

    Le SMTP ou Simple Mail Transfer Protocol (protocole simple de transfert de courrier) est un protocole de communication, ça n'a rien à voir
    Ca n'a rien à voir en effet ! On est au moins d'accord là-dessus ! c'est ce que j'essayais de t'expliquer rapidement.

    Tiens, je te mets une entête SMTP telle que la reçoit un logiciel de messagerie.
    C'est dans cette entête qu'est situé le sujet, pas dans la partie (souvent, mais pas toujours en HTML) qui le suit :

    Code:
    Delivered-To: moichezmon@fai.com
    Received: by 10.37.75.68 with SMTP id y65csp1135392yba;
            Thu, 13 Aug 2015 23:17:57 -0700 (PDT)
    X-Received: by 10.129.58.16 with SMTP id h16mr39877472ywa.8.1439533077088;
            Thu, 13 Aug 2015 23:17:57 -0700 (PDT)
    Return-Path: <jardins@gmail.com>
    Received: from mail-yk0-x229.google.com (mail-yk0-x229.google.com. [2608:f8b0:4104:a07::229;])
            by mx.google.com with ESMTPS id w137si1687177ykb.0.2015.08.13.23.17.56
            for <grocdomi@gmail.com>
            (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
            Thu, 13 Aug 2015 23:17:57 -0700 (PDT)
    Received-SPF: pass (google.com: domain of jardins@gmail.com designates 2608:f8b0:4104:a07::229; as permitted sender) client-ip=2608:f8b0:4104:a07::229;
    Authentication-Results: mx.google.com;
           spf=pass (google.com: domain of jardins@gmail.com designates2608:f8b0:4104:a07::229; as permitted sender) smtp.mailfrom=jardins@gmail.com;
           dkim=pass header.i=@gmail.com;
           dmarc=pass (p=NONE dis=NONE) header.from=gmail.com
    Received: by mail-yk0-x229.google.com with SMTP id w73so7084606ykf.3
            for <moichezmon@fai.com>; Thu, 13 Aug 2015 23:17:56 -0700 (PDT)
    DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
            d=gmail.com; s=20120113;
            h=mime-version:date:message-id:subject:from:to:content-type;
            bh=iYxRCf0PaVhsk0jd+ia8PfU0zGIzjpdBPYvs1v3C/aA=;
            b=0Z1SaOYI0q77pOk0H6nNvutHBX33/okrlXqFg9e8NUqtgfqe+e+Dr+/8QJWs5kaUR/
             bpIsFu3jaj5y++z1FTW7iWR6MFVP0zbVKxnNTZAnLc3hNYTTDC4eiLFu8LJZurZ9SWvJ
             dlzgdJGJ4r/mBQ4zFkvo06wsPFw+wQ5r/O0Pzn/zuesin6F5ruGIJpuS8TdIPFkG9aiB
             uoCdv4KwWXnmyM0zgLjxuC9Bvc0Enx9m+j8BXX/WR0f0SKH9SHumWd6Sn4SbNAITKU+U
             Z0xNCrzwtDOjguU9MumWI2HBt0aJcL+X5YigQ4Iqhuu4KEBNIw9efYku/lE0u3ga1Q89
             2c/g==
    MIME-Version: 1.0
    X-Received: by 10.170.208.140 with SMTP id z134mr33321316yke.76.1439533076610;
     Thu, 13 Aug 2015 23:17:56 -0700 (PDT)
    Received: by 10.13.242.193 with HTTP; Thu, 13 Aug 2015 23:17:56 -0700 (PDT)
    Date: Fri, 14 Aug 2015 08:17:56 +0200
    Message-ID: <CAEQjQR7ZPuGWh_rDyDf_4UwaMLKoDxCeB2vhpCSzbfMXcVKqtw@mail.gmail.com>
    Subject: =?UTF-8?Q?Vente_de_l=C3=A9gumes?=
    From: Jardins<jardins@gmail.com>
    To: undisclosed-recipients:;
    Content-Type: multipart/alternative; boundary=001a11392b86ac8ed5051d3f6981
    Bcc: moichezmon@fai.com
    
    --001a11392b86ac8ed5051d3f6981
    Content-Type: text/plain; charset=UTF-8
    Tu vois la dernière ligne ? Elle précise que le corps du message (qui suit ces entêtes et que je n'ai pas copié) est en text/plain, donc en l’occurrence pas en HTML (ce serait text/html). L'encodage est de l'UTF-8.
    Que veux-tu faire avec du CSS ici ?
    Pour le sujet, quelques lignes plus haut, c'est aussi précisé que c'est de l'UTF-8
    Code:
    Subject: =?UTF-8?Q?Vente_de_l=C3=A9gumes?=
    .
    C'est ça que je voudrais obtenir, à partir du sujet 'Vente de légumes'.

    Finalement, j'ai bien trouvé une solution en analysant le code source du message pour obtenir le sujet tel qu'on peut le lire ci-dessus que je livre aux lexteurs:

    il faut d'abord coder le sujet en UTF-8, puis recoder en URL_compatible. Ensuite, remplacer les '+' par des '_' et les '%' par des '='. Enfin, on crée un ligne d'entête Subjet en faisant précéder le sujet obtenu par =?UTF-8?Q? et en le faisant suivre de ?=. C'est simple, non ?

    Voilà comment envoyer ce sujet en utilisant la fonction mail() de PHP :

    Code:
    $sujet = 'l\'événemênt qui a lieu où ça ?';
    $sujet = urlencode(utf8_encode($sujet));
    $sujet= str_replace(array('+','%'), array('_','='), $sujet);
    mail('une@gmail.com', null,'un message', "Subject: =?UTF-8?Q?$sujet?=");
    Ça marche, mais si quelqu'un a quelque chose de moins bidouillé...

    [edit] non, en fait ça ne fonctionne que sous Thunderbird, pour gmail, il n'y a as de sujet ! bouhouhou !

  7. #6
    bisou10

    Re : Charset des sujets (objet) des e-mails

    Ce qui m'étonne c'est que beaucoup n'aient pas ce problème. Pour moi il y a clairement un souci mais plutôt avec ta version / configuration de php, sinon je pense que ce genre de défaut ressortirait trés souvent, hors, je n'en ai pas entendu parler - c'est loin d'être un point anecdotique

    Tu peux tester avec un autre WAMP ? Avec un code simplifié sans les require() include() que tu as actuellement ?

  8. #7
    uneautreterre

    Re : Charset des sujets (objet) des e-mails

    Citation Envoyé par bisou10 Voir le message
    Tu peux tester avec un autre WAMP ? Avec un code simplifié sans les require() include() que tu as actuellement ?
    C'est déjà fait ! Même problème chez moi et avec deux hébergeurs différents, et avec un code ne comprenant que l'envoi du mail plus l'instruction echo uniqid() me permettant de savoir que le script est terminé.

    Ceci dit, j'ai trouvé une solution, toujours aussi bidouille, qui fonctionne bien : J'ai mis le sujet à sa place, je veux dire en deuxième argument, dans la fonction mail() et j'ai laissé tomber l'ajout d'une entête. J'ai conservé le traficotage effectué dans le code précédent. Gmail ne trouvant plus une chaine vide en premier lieu pour le sujet l'affiche bien.
    Voici ce code, léger remodelage du précédent :

    Code:
    $sujet = 'l\'événemênt qui a lieu où ça ?';
    $sujet = urlencode(utf8_encode($sujet));
    $sujet= str_replace(array('+','%'), array('_','='), $sujet);
    mail('une@gmail.com', "Subject: =?UTF-8?Q?$sujet?=",'un message');
    Le truc, c'est que comme tu dis, ce n'est pas anecdotique et que je ne trouve aucune donc à ce sujet. Même la RFC 821, qui définie ce protocole ne dit rien là-dessus. J'aimerais bien savoir précisément ce que je fais, même si ça marche !

    Merci pour ton aide.

    PS : seules les ligatures passent mal avec ma solution. Mais elles sont rares, surtout dans les mails, les gens ne se faisant pas ch... avec ça.

  9. #8
    bisou10

    Re : Charset des sujets (objet) des e-mails

    Et une idée qui me vient par là tête - tu ne peux pas lire et récrire soit le sujet soit le corps du mail en UTF8 pour normaliser tout ça par exemple ?

    Bon courage en tous cas

  10. #9
    Pauldair

    Re : Charset des sujets (objet) des e-mails

    Bonjour,

    Je pensais à un CSS comme ça:

    Code:
    $sujet = "<span style=\"@charset 'nom du charset';\">l'événemênt qui a lieu où ça ?</span>"

  11. #10
    bisou10

    Re : Charset des sujets (objet) des e-mails

    Citation Envoyé par Pauldair Voir le message
    Bonjour,

    Je pensais à un CSS comme ça:

    Code:
    $sujet = "<span style=\"@charset 'nom du charset';\">l'événemênt qui a lieu où ça ?</span>"
    Là non par contre, il y a une RFC qui normalise l'entête et son charset, donc le CSS ou le HTML ne sont pas parsés.

  12. #11
    uneautreterre

    Re : Charset des sujets (objet) des e-mails

    Eh bien, comme expliqué plus haut, pas de pb pour le corps du message : je l'envoie en HTML avec une meta indiquant le charset quel qu'il soit.

    par contre, pour le sujet, mon expérience me le fait mettre en UTF-8, pour être "thunderbird-compatible". Mais je ne sais pas en fait, si c'est en UTF-8 que s'attendent tous les logiciels de mail et tous les webmails. Il semblerait que non, puisque les sujets sont encodés d'une manière que je qualifierais de curieuse, et surtout sans que ce soit expliqué nulle part.

    @Paulder
    Merci pour tes efforts, mais tu ne devrais pas t'obstiner à vouloir placer du html et du css dans l'entête d'un mail. Comme te l'explique bisou21 avec ses mots, cette partie, destinée aux ordinateurs, et pas aux humains, n'est pas interprétée en tant que html et n'a donc pas de sens.

  13. #12
    Pauldair

    Re : Charset des sujets (objet) des e-mails

    Citation Envoyé par uneautreterre Voir le message
    @Paulder
    Merci pour tes efforts, mais tu ne devrais pas t'obstiner à vouloir placer du html et du css dans l'entête d'un mail. Comme te l'explique bisou21 avec ses mots, cette partie, destinée aux ordinateurs, et pas aux humains, n'est pas interprétée en tant que html et n'a donc pas de sens.
    OK je n'insiste pas, mais HTML est un protocole destiné à l'échange de données entre machines et non pas aux humains. Seul le rendu est accessible aux yeux humains.
    <span style="text-indent:25px; color:black; font-weight:bold;">On ne lit pas ça,</span> mais plutôt ceci

  14. #13
    bisou10

    Re : Charset des sujets (objet) des e-mails

    Citation Envoyé par Pauldair Voir le message
    OK je n'insiste pas, mais HTML est un protocole destiné à l'échange de données entre machines et non pas aux humains. Seul le rendu est accessible aux yeux humains.
    <span style="text-indent:25px; color:black; font-weight:bold;">On ne lit pas ça,</span> mais plutôt ceci
    Sauf que HTML est fait pour être rendu (au sens visuel), mais pas le sujet d'un mail, qui n'a aucun lien avec un quelconque display ou formatage

  15. #14
    uneautreterre

    Re : Charset des sujets (objet) des e-mails

    tu ne peux pas lire et récrire soit le sujet soit le corps du mail en UTF8 pour normaliser tout ça par exemple ?
    C'est bien ce que je fais. Seulement je n'ai aucune garantie que tous les systèmes attendent de l'UTF-8. Thunderbird attende de l'UTF-8, Gmail interprète aussi bien l'UTF-8 que l'iSO-8859-1, mais qu'en est-il des autres ?
    Si les sujets des messages que je reçois sont codés tels qu'ils le sont, c'est qu'il doit bien y avoir une raison...

    Tiens, je viens de regarder le code de la classe PHPmailer de la bibliothèque du même nom bien connue et essayé de retrouver les fonctions d'encodage utilisées. On y retrouve un savant mélange d'au moins trois types d'encodage, et une bidouille sur cette ligne qui ressemble fort à la solution que j'ai trouvée :
    Code:
    $start = "=?".$this->CharSet."?B?";

  16. #15
    Bluedeep

    Re : Charset des sujets (objet) des e-mails

    Citation Envoyé par Pauldair Voir le message
    OK je n'insiste pas, mais HTML est un protocole destiné à l'échange de données
    Pas du tout. HTML n'est pas un protocole; le protocole qui sous-tend habituellement les données exposées en HTML (mais pas que) c'est le HTTP.

Discussions similaires

  1. Pivoter objet autour de l'axe d'un autre objet
    Par Yoshy56 dans le forum Mathématiques du collège et du lycée
    Réponses: 2
    Dernier message: 05/06/2013, 10h11
  2. Optique - Objet dans le plan focal objet...
    Par invite23f07960 dans le forum Physique
    Réponses: 4
    Dernier message: 04/03/2011, 19h05
  3. lumière reçue par un objet et couleur de objet
    Par mor dans le forum Physique
    Réponses: 1
    Dernier message: 03/12/2010, 07h39
  4. Rotation d'un objet dans un repère autour d'un axe de cet objet
    Par invite8001d615 dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 03/05/2009, 14h21
  5. Comment copier des mails qui sont sur Vista dans Windows Mails
    Par roro123 dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 13/05/2007, 15h29