Le 28/03/2013 21:11, Eric Demeester a �crit :
>
> En compl�ment des r�ponses d'Olivier, [...]
... et je vais compl�ter de nouveau ta r�ponse, parfois en contradiction
avec ce que tu �cris (et avec ce qu'�crit Erwan juste apr�s).
> Je vais peut-�tre enfoncer des portes ouvertes, mais tant qu'� faire,
> autant essayer d'expliquer au mieux.
>
> 1. En-t�tes obligatoires :
>
> Elles sont indispensables � l'identification et � la propagation.
> Je ne vais pas d�tailler, mais en gros :
> Path: ,Date: ,From: ,MIME-Version: ,Newsgroups: ,Subject: ,
> Content-Type: ,Content-Transfer-Encoding: ,etc., en font partie.
> (note l'espace obligatoire apr�s le � : �, valable aussi pour les
> en-t�tes facultatives)
Je pr�cise que MIME-Version, Content-Type et Content-Transfer-Encoding
sont une triade ins�parable. Si le corps de l'article est tout entier
du texte brut en US-ASCII 7 bits, alors on peut les omettre tous les
trois. Sinon, tous les trois sont obligatoires.
Je me souviens par exemple d'un article qui avait un Content-Type et
un Content-Transfer-Encoding tout � fait corrects, ce qui satisfaisait
pleinement mon SeaMonkey. Mais quelqu'un �tait venu demander sur fu8
pourquoi �a ne fonctionnait pas dans son nouvelleur exotique, et on
a trouv� que c'�tait parce qu'il manquait MIME-Version.
Note : une seule version est d�finie pour ce champ, � savoir 1.0.
> 2. En-t�tes facultatives :
>
> Bien que non d�finies dans les RFC, elles donnent un certain nombre
> d'indications suppl�mentaires, � titre d'information pour les lecteurs
> ou les robots, et sont pr�fix�es par X :
> X-No-Archive: , X-Face: , X-Trace: , X-Complaints-To: , etc.
Certains ent�tes ont �t� d�finis depuis, par exemple Archive (cens�
remplacer X-No-Archive), Injection-Date et Injection-Info (pour faire
en gros la m�me chose que X-Trace), etc.
Tout ceci est d�fini dans le RFC 5536 [1], qu'on attendait depuis des
ann�es (novembre 2009, soit vingt-deux ans apr�s le RFC 1036 dat� de
d�cembre 1987).
> 3. Ordre des champs :
>
> Alors c'est tr�s simple, il n'y en a pas. G�n�ralement, le Path: vient
> en premier, mais apr�s, on ne sait pas. Tout ce que demande la RFC,
> c'est que l'ensemble des champs indispensables soient pr�sents, ce qui a
> une importance particuli�re pour le champ Subject: .
Il est aussi demand� pour la plupart des ent�tes qu'ils ne soient pas
pr�sents plus d'une fois. Cf. RFC 5536 [1].
> 4. Encodage des champs :
>
> C'est syst�matiquement de l'ASCII 7 bits, sauf, parfois, pour le
> Subject: .
Formellement, c'est syst�matiquement de l'ASCII 7 bits, sans exception.
Pour y mettre des caract�res non ASCII, c'est possible, mais en les
encodant selon le RFC 2047 [2].
Le flou qui r�gne � ce propos vient du fait que le RFC 2047 a �t� r�dig�
en 1996 comme un compl�ment du RFC 822 (anc�tre du RFC 5322 [3]) qui ne
concerne que le mail, et qu'il a fallu attendre encore treize ans avant
que le RFC 5536 ne confirme que oui, bien s�r, cela s'appliquait aussi
aux news.
Du coup, sur usenet-fr o� le besoin de caract�res accentu�s �tait criant
dans les champs From et Subject, et o� ISO-8859-1 �tait le seul standard
en dehors de US-ASCII (je parle de bien avant UTF-8), il a �t� dit que
la seule fa�on correcte de faire �tait de mettre de l'ISO-8859-1 non
d�clar� et non cod� dans les champs d'ent�te.
Quoi qu'il en soit, le RFC 5322 ne laisse plus aucun doute aujourd'hui :
<cit.>
o The character set for header fields is US-ASCII. Where the use of
non-ASCII characters is required, they MUST be encoded using the
MIME mechanisms defined in [RFC2047] and [RFC2231].
</cit.>
> 5. Le cas du champ Subject :
>
> C'est le seul champ d'en-t�te dans lequel on peut trouver des caract�res
> non ASCII 7bits (caract�res accentu�s par exemple). Lors du transport,
> ils peuvent soit �tre encod�s (en QP par exemple), soit pas.
Donc non. D'une part on peut les trouver dans d'autres champs comme
le champ From par exemple (tu pourrais t'appeler �ric et non pas Eric)
mais surtout ils *doivent* (MUST) �tre encod�s.
> Cela d�pend de ces lignes, par exemple, si on a :
> Content-Type: text/plain; charset=ISO-8859-15;
> Content-Transfer-Encoding: 8bit
Rappel : si ces deux lignes sont pr�sentes, alors il faut forc�ment la
troisi�me aussi.
Content-Type: text/plain; charset=ISO-8859-15
Content-Transfer-Encoding: 8bit
Mime-Version: 1.0
> Il y a des chances que le Subject � �a va pas la t�te ? � circule tel
> quel.
Cela arrive encore, mais c'est une erreur.
> Mais si on a des choses horribles genre :
> Content-Type: text/plain; charset=UTF-8
> Content-Transfer-Encoding: quoted-printable
>
> On risque de se trouver avec un Subject: encod� en QP.
Note aussi que l'on peut tr�s bien trouver un body en QP et des ent�tes
en Base64, ou l'inverse, et en fait n'importe quelle combinaison. Il
est m�me possible d'avoir dans un m�me champ d'ent�te une partie en
UTF-8/Base64 et une autre en ISO-8859-1/QP (par exemple).
Au passage, j'en profite pour rappeler (ou apprendre) � Julien qu'il
convient d'�viter le quoted-printable pour le body, contrairement � ce
que fait Google groupes.
> Oui mais :
> - d'une part, le Content-Type: et le Content-Transfer-Encoding: sont
> cens�s s'appliquer � l'encodage du CORPS du message, pas au
> Subject : ;
> - d'autre part, on ne peut pas �tre certain que le Subject: soit d�fini
> APR�S le Content-Type: et le Content-Transfer-Encoding: .
Tout � fait exact. D'autant plus que, comme tu le rappelais, les ent�tes
peuvent �tre dans n'importe quel ordre sans que cela ne change leur
signification. Et les ent�tes MIME que sont MIME-Version, Content-Type
et Content-Transfer-Encoding ne portent que sur l'encodage du body, pas
sur les autres ent�tes.
> Corollaire : il faut laisser le champ Subject: tranquille, sans chercher
> � l'encoder ou le d�coder, juste se contenter de v�rifier que ta
> fonction PHP ne le transformera pas en gloubiboulga.
Pas d'accord. En lecture il faut le d�coder s'il est encod� en MIME, et
en �criture il faut l'encoder s'il contient autre chose que de l'ASCII.
> C'est le lociciel client qui se chargera le cas �ch�ant de le d�coder si
> n�cessaire (cas d'un encodage en QP par exemple). Sur ce point, tu me
> r�pondras que le logiciel client, c'est l'interface de ton navigateur,
> et tu n'auras pas tort.
Ah, tu ne parlais pas du logiciel client. Oui, du coup je suis d'accord
avec ton paragraphe pr�c�dent : il faut laisser tranquilles tous les
ent�tes que l'on n'a pas besoin d'interpr�ter.
> Mais ce qui est valable en r�ception l'est aussi en envoi. Si ta
> passerelle doit injecter des articles sur le r�seau NNTP, elle doit
> imp�rativement respecter les conventions de transport et d'encodage, si
> possible en envoyant un encodage propre, genre :
> Content-Type: text/plain; charset=ISO-8859-15;
> Content-Transfer-Encoding: 8bit
sans oublier MIME-Version: 1.0 (comment ? je l'ai d�j� dit ?)
> et en le respectant dans le corps du message, sans quoi tes articles
> risquent de s'av�rer illisibles avec mon logiciel, par exemple.
Oui.
> Tout ceci est incomplet, mais c'est juste pour pointer la complexit� de
> ce � quoi tu t'attaques, et l'absolue n�cessit� d'avoir une parfaite
> compr�hension de tous ces points si tu veux �viter d'aller dans le mur.
>
> J'ai d'ailleurs probablement racont� des b�tises ou commis des
> inexactitudes, corrections et compl�ments bienvenus de la part de ceux
> qui savent mieux que moi.
Je ne m'en suis pas priv�. ;-)
Cordialement,
--
Olivier Miakinen
[1] RFC 5536, Netnews Article Format
<
http://tools.ietf.org/html/rfc5536>
[2] RFC 2047, MIME #3 : Message Header Extensions for Non-ASCII Text
<
http://tools.ietf.org/html/rfc2047>
[3] RFC 5322, Internet Message Format
<
http://tools.ietf.org/html/rfc5322>