Outlook en auto-nettoyant mes sauts de ligne et en bousant mon format de courrier électronique

J’envoie un email en utilisant le framework dotnet. Voici le modèle que j’utilise pour créer le message:

Date of Hire: %HireDate% Annual Salary: %AnnualIncome% Reason for Request: %ReasonForRequest% Name of Voluntary Employee: %FirstName% %LastName% Total Coverage Applied For: %EECoverageAmount% Guaranteed Coverage Portion: %GICoveragePortion% Amount Subject to Medical Evident: %GIOverage% 

Lorsque les messages sont reçus dans Outlook, Outlook me dit “Des sauts de ligne supplémentaires dans ce message ont été supprimés”. Et le message s’affiche comme ceci:

 Date of Hire: 9/28/2001 Annual Salary: $100,000 Reason for Request: New Hire Name of Voluntary Employee: Ronald Weasley Total Coverage Applied For: $500,000 Guaranteed Coverage Portion: $300,000.00 Amount Subject to Medical Evident: $200,000 

Notez comment Outlook supprime incorrectement les sauts de ligne nécessaires après le nom, EECoverageAmount, etc …

Il est important que les destinataires reçoivent un courrier électronique correctement formaté, et je suppose que certains d’entre eux utilisent Outlook 2003. Je ne peux pas non plus supposer qu’ils en sauront assez pour désactiver la fonction d’autoclavage afin de formater correctement le message.

J’ai vu ces messages dans d’autres clients de messagerie et ils s’affichent correctement

quelques informations supplémentaires:

  • J’utilise UTF-8 BodyEncoding (msg.BodyEncoding = System.Text.Encoding.UTF8)
  • Msg.Body est en cours de lecture à partir d’un fichier texte codé en UTF-8 et chaque ligne est terminée par un crlf.

Question: Comment changer le format du message pour éviter ce problème?

Commencez chaque ligne avec 2 espaces et Outlook sera “piégé” en gardant votre format.

Donc changer

 Date of Hire: %HireDate% Annual Salary: %AnnualIncome% Reason for Request: %ReasonForRequest% Name of Voluntary Employee: %FirstName% %LastName% Total Coverage Applied For: %EECoverageAmount% Guaranteed Coverage Portion: %GICoveragePortion% Amount Subject to Medical Evident: %GIOverage% 

à

  Date of Hire: %HireDate% Annual Salary: %AnnualIncome% Reason for Request: %ReasonForRequest% Name of Voluntary Employee: %FirstName% %LastName% Total Coverage Applied For: %EECoverageAmount% Guaranteed Coverage Portion: %GICoveragePortion% Amount Subject to Medical Evident: %GIOverage% ^^ <--- Two extra spaces at the start of every line 

Voici l' article que j'ai trouvé lors de la recherche de ce problème qui va un peu plus loin que ma réponse.

Vous pouvez également insérer un caractère de tabulation à la fin de la ligne (juste avant le CR LF). Cet espace blanc supplémentaire sera à la fin de la ligne et ne sera donc pas visible pour l’utilisateur. Vous préférerez peut-être avoir à insérer des espaces sur la gauche. Notez qu’un seul espace ne suffit pas (même si plusieurs espaces pourraient aider, je ne sais pas.)

Cette réponse est sur la façon de “désactiver” la fonctionnalité à partir du client Outlook.

  • Allez dans Outils -> “Options …”
  • Dans l’onglet “Préférences”, cliquez sur “Options de messagerie …”
  • Décochez la case “Supprimer les sauts de ligne supplémentaires dans les messages en texte brut”.
  • Hit OK

FYI: J’utilise Outlook 2007

J’ai toujours eu plus de chance de formater les e-mails en HTML. Vous avez peut-être encore le problème de l’utilisateur final de devoir configurer le client pour autoriser le format html, mais ils sont généralement plus familiarisés avec cela car de nombreux e-mails sont formatés en HTML. Vous avez également un peu plus de travail sur votre ajout en ajoutant les balises HTML, mais le résultat final est beaucoup plus contrôlable.

@ephemient suggère également: Envoyer en HTML et en texte brut. Les bons clients montreront ce dernier, Outlook montrera le premier, tout le monde est content (sauf le programmeur qui doit faire plus de travail).

Ajouter “\ t \ r \ n” (\ t pour TAB) au lieu de “\ r \ n” a fonctionné pour moi sur Outlook 2010.

En élargissant la réponse à Doug L , étant donné que je pense que la messagerie HTML est encore plus omniprésente et acceptée maintenant qu’en 2008, lorsque cette réponse a été publiée. Voici un petit extrait de c # pour aider à convertir le corps et envoyer le message au format HTML:

 body = ssortingng.Format("{0}", body.Replace("\r\n", "
")); using (var smtpClient = new SmtpClient() { Host = smtpHost }) using (var msg = new MailMessage(from, emailDissortingbution, subject, body) { IsBodyHtml = true }) smtpClient.Send(msg);

Je constate le même problème lors de la génération d’un e-mail en texte brut et de sa lecture avec Outlook 2003 SP3. Il semble que vous pouvez éviter le processus de suppression en conservant une longueur de ligne inférieure à 40 caractères. Peut ne pas toujours être pratique.

Placez le texte dans


Tags et Outlook formatera et affichera le texte correctement.

je l'ai défini en CSS inline dans HTML Body comme:

CSS:

 pre { font-family: Verdana, Geneva, sans-serif; } 

J'ai défini la famille de fonts à définir.

HTML:

 
Entry Date/Time: 2013-09-19 17:06:25 Entered By: Chris worklog mania ____________________________________________________________________________________________________ Entry Date/Time: 2013-09-19 17:05:42 Entered By: Chris this is a new Worklog Entry

Mon texte inclut ‘\ r \ n’ mais Outlook 2010 ne rend pas le saut de ligne. Créez des jetons de lignes délimitées par ‘\ r \ n’ et des jetons d’enveloppe par des balises de paragraphe HTML. Mon format de courrier électronique est HTML. Je génère le corps HTML pour mon email dans le code ci-dessous.

 ssortingng[] tokens = Regex.Split(objTickt.Description, "\r\n"); if (tokens.Length > 0) { foreach (ssortingng line in tokens) { //htmlTW.WriteEncodedText(objTickt.Description.Replace("\r\n", "\n\n")); htmlTW.RenderBeginTag(HtmlTextWriterTag.P); htmlTW.WriteEncodedText(line); htmlTW.RenderEndTag(); } } 

Changez votre terminaison de ligne de crlf à cr ou lf.

Je soupçonne que le haut de l’e-mail utilise uniquement cr (ou lf), et Outlook s’attend à ce que le rest du courrier électronique adopte le même format.