J'utilise .NET SmtpClient
pour envoyer un courrier électronique lorsque le sujet peut contenir des caractères en dehors de la plage ASCII. Le RFC 2047 définit comment le texte de courrier électronique doit être codé lorsqu'il contient des caractères spéciaux. Voici un exemple d'un sujet dans un en-tête e-mail:SmtpClient (.NET) n'encode pas l'en-tête de courrier conformément à RFC 2047
Subject: Votre enregistrement numéro 123
Cela devrait devenir, après l'encodage ISO-8859-1:
Subject: =?iso-8859-1?Q?Votre=20enregistrement=20num=E9ro=20123?=
où tous les caractères spéciaux, y compris ?
, =
(et autres) et espace, sont codés en utilisant la séquence d'échappement =xx
.
Cependant, quand je regarde ce que SmtpClient
produit, je découvre qu'il n'échappe pas les espaces blancs, ce qui signifie que le client de messagerie reçoit cet en-tête:
Subject: =?iso-8859-1?Q?Votre enregistrement num=E9ro 123?=
sens que le codage est cassé par rapport à (ma lecture de) RFC 2047. Certains clients de messagerie sont parfaitement satisfaits de cet encodage incorrect (la plupart d'entre eux, en fait, y compris Outlook et Gmail), mais un (wanadoo.fr) affiche le en-tête dans son format brut. Ce n'est pas ce que l'utilisateur doit se voir :-(
Y at-il de solution connue pour ce problème
Remarque: la mise en œuvre .NET 4.0 de SmtpClient
code le sujet comme prévu, ce qui donne cette sortie , ce qui est correct:
Subject: =?Windows-1252?Q?Votre_enregistrement_num=E9ro_123?=
Je n'ai pas une solution pour vous, mais je vais confirmer votre interprétation de la RFC 2047, section spécifique 4.2 (3): "En particulier, ESPACE et TAB NE DOIVENT PAS être représentés comme eux-mêmes dans les mots codés." (Notez qu'au lieu de = 20, vous pouvez également utiliser un trait de soulignement) – Joe
+1 pour une grande question/problème soulevé et que vous citez en fait le RFC correspondant, vous avez fait vos devoirs et avez encore un problème à résoudre – curtisk
Spécifiez-vous encodage de message ou laissez-vous fonctionner SmtpClient de la manière par défaut? – Timores