2011-11-11 2 views
1

J'ai écrit un programme de traitement de courrier, qui consiste essentiellement à appliquer un modèle sur le courrier entrant et à le transmettre. Le courrier entrant va vers un compte Gmail, que je télécharge en utilisant POP, puis je lis le mail (à la fois html et multipart-MIME), apporte les modifications nécessaires au template, puis crée un nouveau mail avec le fichier plain + html texte et l'envoyer à une autre adresse.Caractères étranges dans le courrier électronique

Problème, lorsque le courrier arrive de l'autre côté, certains courriers ont été mutilés, avec des caractères étranges comme à et  insérés magiquement. Ils n'étaient pas dans les mails d'origine, ils ne sont pas dans mon modèle, et je ne peux pas trouver n'importe quel type de modèle prévisible quant à quand ces caractères apparaissent. Je suis sûr que cela a quelque chose à voir avec les propriétés d'encodage des mails, mais je m'assure que le jeu de caractères et l'encodage de transfert du courrier sortant soient les mêmes que ceux du courrier entrant. Alors, que dois-je faire d'autre?

EDIT: Voici un échantillon snipped d'un courrier entrant:

Content-Type: text/plain; charset=iso-8859-1 
Content-Transfer-Encoding: quoted-printable 

=0A=0ASafari Special:=0A=0A=A0=0A=0ASafari in Thornybush Priv= 
ate Game Reserve 9-12=0AJanuary 2012 (3nights) 

Après le traitement, cela vient comme:

Content-Type: text/plain; charset=ISO-8859-1 
Content-Transfer-Encoding: quoted-printable 

=0D=0A=0D=0ASafari Special:=0D=0A=0D=0A=C2=A0=0D=0A=0D=0A= 
Safari in Thornybush Private Game Reserve 9-12=0D=0AJanuary= 
2012 (3nights) 

Notez l'insertion des caractères =0D et =C2 (côté de quelques =0A qui n'étaient pas dans l'original).

Alors, que pensez-vous qu'il se passe ici?

UN AUTRE CLUE: Voici mon code qui crée l'autre point de vue:

var htmlView = AlternateView.CreateAlternateViewFromString(htmlBody, null, "text/html"); 
htmlView.ContentType.CharSet = charSet; 
htmlView.TransferEncoding = transferEncoding; 
m.AlternateViews.Add(htmlView); 

Le long des lignes de ce @mjwills suggéré, peut-être la méthode CreateAlternativeViewFromString() suppose déjà UTF-8, et le changer plus tard iso -8859-1 ne fait pas de différence?

+2

Cela ressemble à un problème d'encodage. Publiez un exemple de message que vous envoyez et le message brouillé qui en résulte. Vous devriez jeter un oeil à la forme binaire du courrier à chaque étape du processus. – Mankarse

+0

@Mankarse - voir mon edit –

Répondre

2

Donc tout = 0A devient = 0D = 0A. Et tout = A0 devient = C2 = A0.

Le premier semble être lié à Carriage Return/Line Feeds. Ce dernier semble être lié à What is "=C2=A0" in MIME encoded, quoted-printable text?. Je suppose que même si vous avez spécifié le jeu de caractères, quelque chose à part, la ligne le traite comme UTF8.

Vous pouvez essayer d'utiliser this form de CreateAlternateViewFromString, où ContentType.CharSet est défini de manière appropriée.

+0

Voir mon edit - "Un autre indice" –

+0

L'autre signature de CreateAlternateViewFromString le rend encore pire. Au lieu de tromper le texte, maintenant toute la structure multipart-MIME devient foirée, de sorte que tout l'email apparaisse en pièce jointe! –

+0

Montrez-nous le code alternatif que vous avez essayé. – mjwills

Questions connexes