J'envoie un e-mail 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 m'indique 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 des e-mails reçoivent un e-mail correctement formaté, et je dois supposer que certains d'entre eux utilisent Outlook 2003. Je ne peux pas non plus supposer qu'ils en sauront suffisamment pour arrêter la fonction de nettoyage automatique pour que le message se formate correctement.
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)
- Le msg.Body est lu à partir d'un fichier texte encodé en UTF-8, et chaque ligne se termine par un crlf.
Question: Comment modifier le format du message pour éviter ce problème?
\r\n
. Cela a fonctionné pour moi.Réponses:
Commencez chaque ligne avec 2 espaces et les perspectives seront "trompées" pour conserver votre mise en forme.
Alors change
à
Voici l' article que j'ai trouvé en recherchant ce problème qui va un peu plus en profondeur que ma réponse.
la source
Regex.Replace(messageBody, @"^(?!\s\s)", " ", RegexOptions.Multiline);
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 donc non visible par l'utilisateur. Vous préférerez peut-être cela à l'insertion d'espaces sur la gauche. Notez qu'un seul espace n'est pas suffisant (même si plusieurs espaces pourraient aider, je ne sais pas.)
la source
Regex.Replace(messageBody, @"(?<!\t)((?<!\r)(?=\n)|(?=\r\n))", "\t", RegexOptions.Multiline)
Cette réponse explique comment «désactiver» la fonctionnalité du client Outlook.
FYI: j'utilise Outlook 2007
la source
J'ai toujours eu plus de chance de formater les e-mails en HTML. Vous pouvez toujours avoir le problème de l'utilisateur final d'avoir à configurer le client pour autoriser le format html, mais ils sont généralement plus familiers avec cela car de nombreux e-mails sont au format html. Vous avez également un peu plus de travail de votre côté en ajoutant 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 ce dernier, Outlook montrera le premier, tout le monde est content (sauf le programmeur qui doit faire plus de travail).
la source
L'ajout de "\ t \ r \ n" (\ t pour TAB) au lieu de "\ r \ n" a fonctionné pour moi sur Outlook 2010.
la source
"\r\n "
(deux espaces, pas de tabulation) après la nouvelle ligne comme un hack similaire. Fonctionne dans Outlook 2016. YMMV.Élargissement de la réponse Doug L , car 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 code c # pour vous aider à convertir le corps et à envoyer le message au format HTML:
la source
Je vois le même problème lors de la génération d'un e-mail en texte brut, puis de sa lecture avec Outlook 2003 SP3. Il semble que vous pouvez éviter le processus de suppression en gardant la longueur de ligne inférieure à 40 caractères. Peut-être pas toujours pratique.
la source
Mettez le texte dans
<pre>
Tags et Outlook formatera et affichera le texte correctement.Je l'ai défini en CSS inline dans HTML Body comme:
CSS:
J'ai défini la famille de polices pour avoir un jeu de polices.
HTML:
la source
Le nettoyage automatique est une fonction Outlook qui supprime les sauts de ligne supplémentaires. Vous pouvez l'empêcher de deux manières.
La première façon consiste à ajouter au moins 2 espaces supplémentaires avant les lignes lors de l'envoi de l'e-mail via le code. Vous pouvez ajouter ces espaces supplémentaires uniquement avant les lignes que Outlook supprime automatiquement.
La deuxième méthode consiste à modifier le paramètre Outlook, ce qui empêchera Outlook de supprimer les sauts de ligne supplémentaires.
la source
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 un corps HTML pour mon e-mail dans le code ci-dessous.
la source
Changez la terminaison de votre ligne de crlf en cr ou lf.
Je soupçonne que le haut de l'e-mail n'utilise que cr (ou lf), et Outlook s'attend à ce que le reste de l'e-mail suive le même format.
la source