8768 sujets

Développement web côté serveur, CMS

Bonjour

Mon Client mail fait maison affiche parfois des messages contenant des caractères « parasites », comme …est envoyé à titre de test pour être lu par un ...

Des caractères parasites qui ne s’affichent pas en ouvrant les mêmes messages avec le webmail qui convient.

Un test récent :
• Envoi du même texte, contenant des caractères accentués, depuis 3 adresses mail de 3 serveurs mail différents : Gmail , Live, Free
• Vers une adresse mail à La Poste

Résultats :
• Présentation du texte OK : venant de Live, Free
• Présentation du texte KO : venant de Gmail

Manifestement, les caractères du message doivent être encodés de manière différente.

Si c’est bien ça, comment détecter cet encodage, comment en tenir compte dans l’affichage ?

Par avance merci de votre aide.

Francois
Modérateur
Salut,

Ton script en quoi il est encodé ?
Tes données comment sont elles encodées ?
l'en-tête, comment est il encodé ?
Comme en HTTP, l'encodage utilisé dans les e-mails est normalement censé être indiqué dans les en-têtes.

Tu devras te renseigner sur le format MIME...

Et si rien n'est indiqué, il existe des euristiques d'auto-détection, pas fiables à 100% mais suffisantes pour trancher entre UTF-8 et ISO-8859-1 dans 99.9% des cas (ça marche si on ne s'attend pas à recevoir autre chose de moins courant genre des encodages chinois/japonais/autre)
Modifié par QuentinC (22 May 2014 - 07:49)
bonjour et merci de vos réponses.

Comme vous l'avez compris, je n'encode pas puisque mon problème est en réception quand mon Client lit des messages envoyés par des correspondants.

Oui, je vais aller voir les en-têtes pour essayer d'y distinguer une information utile; tu as raison, c'est certainement là que se trouve la bonne information.

Je vous tiendrai au courant.

Francois
Modérateur
Si automatiquement tu encodes : ton fichier de développement, les données venant d'une base, etc.

Ton problème fait penser à ISO-8859-1 vers un affichage en utf-8
bonjour

J'ai provoqué l'affichage du contenu de $header = imap_fetchheader($mail_cnx, $i, FT_PREFETCHTEXT); pour mes 4 messages de test, tous parfaitement identiques, trois des messages s'affichant normalement, l'un ayant des caractères parasites.

Je ne vois pas dans les informations de ces contenus des éléments me permettant de distinguer un encodage:
- un seul message affiche charset=ISO-8859-15
- tous affichent MIME-Version: 1.0
- aucun n'affiche utf

Le header du message parasité, venant de Gmail, montre une structure du contenu nettement différente de celles des autres contenus mais sans information utilisable.

Y a t il d'autres pistes à explorer.

Quand je fais utf8_decode() sur le message parasité, il s'affiche correctement; il reste maintenant à trouver comment identifier les messages à décoder?

Merci en tout cas de votre aide.

Francois
Modifié par francoisch (24 May 2014 - 11:40)
bonjour Niuxe et merci de ta réponse.

Oui, j'utilise Notepad++ en permanence, j'ai d'ailleurs quelques pages sur mon site qui sont pour certaines en chinois ancien, d'autres en arabe, pour dire que j'ai bien converti des documents en utf-8.

Pour les mêmes raisons, mes données MySql sont pour partie en utf-8.

Mais mon problème est différent, il apparaît en recevant des messages.

Mon Client mail interroge le serveur de l'utilisateur, reçoit les messages et les affiche; c'est à l'affichage que certains messages sont parasités.

J'ai essayé de convertir tous les mails en utf-8 mais ça ne convient pas; je cherche donc à identifier ceux que je dois convertir et, quand je le fais en test sur un message pollué, l'affichage est bon.

Merci de ton aide.

Francois
As-tu regardé si l'API que tu utilisais pour te connecter en IMAP ou POP proposait des options de transcodage ?
Tout à coup qu'un transcodage soit effectué dans ton dos...

Sinon si les en-têtes sont réellement incomplètes ou pas suffisament précises, il va falloir construire un algo qui « devine » l'encodage.

Perso j'en ai utilisé un qui allait assez bien pour trancher entre ISO-8859-1 et UTF-8 dans 99.9% des cas. En fait si c'est juste entre ces deux-là, c'est pas si compliqué à faire. Je peux fournir un exemple en C, ou j'ai aussi la version Java, si ça intéresse.

Je pense que notepad++ et les autres ont des algos symilaires pour déterminer l'encodage des fichiers sans BOM qu'on ouvre, et que les navigateurs et les clients mail classiques (comme thunderbird) en ont aussi un au cas où ils n'ont pas d'autre information pour décider.
bonjour

Je connecte avec @imap_open (), je ne vois pas de paramètre lié à l'encodage; excellente suggestion à laquelle je n'avais pas pensé.

Oui, je crois que l'affaire se joue entre ISO-8859-1 et UTF-8; comme je ne connais que le Php, pourrais tu me fournir le code qui s'en rapproche le plus, C peut-être?

Grand merci de ton aide.

Francois