Outlook auto nettoyant ma ligne se brise et bousille mon format de courrier électronique

StackOverflow https://stackoverflow.com/questions/247546

  •  05-07-2019
  •  | 
  •  

Question

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 que & "Les 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 de manière incorrecte les sauts de ligne nécessaires après le nom, EECoverageAmount, etc ...

Il est important que les destinataires d'e-mails reçoivent un email correctement formaté, et je dois supposer que certains d'entre eux utilisent Outlook 2003. Je ne peux pas non plus présumer qu'ils en sauront assez pour désactiver la fonction de nettoyage automatique afin de formater le message. correctement.

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

quelques informations supplémentaires:

  • J'utilise BodyTecoding UTF-8 (msg.BodyEncoding = System.Text.Encoding.UTF8)
  • Le msg.Body est en cours de lecture dans un fichier texte codé en UTF-8, et chaque ligne se termine par un fichier crlf.

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

Était-ce utile?

La solution

Commencez chaque ligne par 2 espaces et Outlook sera & "trompé &"; en gardant votre formatage.

Alors changez

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 la

Autres conseils

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

Cette réponse concerne comment & "désactiver" & "; la fonctionnalité du client Outlook.

  • Allez dans Outils - > " Options ... "
  • Dans les " 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. &";
  • cliquez sur OK

Pour info: j'utilise Outlook 2007

J'ai toujours eu plus de chance en formatant les e-mails au format HTML. Vous pouvez toujours avoir le problème de l'utilisateur final de devoir configurer le client pour autoriser le format HTML, mais ils sont généralement plus familiers avec cela, car de nombreux courriers électroniques sont au format HTML. Vous devez également travailler un peu plus pour ajouter les balises HTML, mais le résultat final est beaucoup plus contrôlable.

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

Ajout de " \ t \ r \ n " (\ t pour la tabulation) au lieu de & "; \ r \ n &"; a travaillé pour moi sur Outlook 2010.

Développement de la réponse Doug L , car j'estime que la messagerie HTML est encore plus répandue et acceptée aujourd'hui que dans 2008 lorsque cette réponse a été publiée. Voici un petit extrait de code c # pour vous aider à convertir le corps et envoyer le message au format HTML:

body = string.Format("<font face='calibri,arial,sans-serif'>{0}<font/>", body.Replace("\r\n", "<br>"));

using (var smtpClient = new SmtpClient() { Host = smtpHost })
using (var msg = new MailMessage(from, emailDistribution, subject, body) { IsBodyHtml = true })
     smtpClient.Send(msg);

Je rencontre le même problème lorsque je génère un courrier électronique en texte brut, que vous lisez ensuite avec Outlook 2003 SP3. Il semble que vous puissiez éviter le processus de suppression en conservant une longueur de ligne inférieure à 40 caractères. Peut ne pas toujours être pratique.

Mettez le texte dans <pre> Les balises et Outlook formateront et afficheront le texte correctement.

je l'ai défini dans CSS intégré dans HTML Body comme:

CSS:

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

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

HTML:

<td width="70%"><pre>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</pre></td>

Le nettoyage automatique est une fonctionnalité de Outlook qui supprime les sauts de ligne supplémentaires. Vous pouvez l’empêcher de deux manières.

  • La première méthode consiste à ajouter au moins deux espaces supplémentaires avant les lignes lors de l'envoi du courrier électronique via le code. Vous pouvez ajouter ces espaces supplémentaires uniquement avant les lignes supprimées automatiquement par Outlook.

  • La deuxième façon est de modifier les paramètres de perspective afin d'éviter les perspectives. de supprimer les sauts de ligne supplémentaires.

 entrer la description de l'image ici

 entrer la description de l'image ici

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

string[] tokens = Regex.Split(objTickt.Description, "\r\n");
  if (tokens.Length > 0)
  {
     foreach (string 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 en 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 reste de l'e-mail suive le même format.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top