web-dev-qa-db-fra.com

Comment formater une chaîne dans un courrier électronique pour qu'Outlook imprime les sauts de ligne?

J'essaie d'envoyer un courrier électronique en Java, mais lorsque j'ai lu le corps du courrier électronique dans Outlook, il s'est débarrassé de tous mes sauts de ligne. Je mets\n au bout des lignes, mais y a-t-il quelque chose de spécial que je dois faire, à part ça? Les destinataires vont toujours utiliser Outlook. 

J'ai trouvé une page sur Microsoft.com qui indique qu'il existe une "fonctionnalité" "Supprimer les sauts de ligne" dans Outlook. Cela signifie-t-il qu'il n'y a pas d'autre solution pour contourner ce problème que de décocher ce paramètre?

Merci

64
MattGrommes

Vous devez utiliser \r\n comme solution.

25
Robert Wilkinson

Je viens de me battre avec cela aujourd'hui. Appelons le comportement de suppression des sauts de ligne supplémentaires "continuation". Un peu d’expérimentation trouve le comportement suivant:

  • Chaque message commence par la suite. 
  • Les lignes de moins de 40 caractères ne déclenchent pas la poursuite, mais si la poursuite est activée, leurs sauts de ligne seront supprimés. 
  • Les lignes de 40 caractères ou plus activent la continuation. Il reste allumé jusqu'à ce qu'un événement se produise pour l'éteindre. 
  • Les lignes qui se terminent par un point, un point d'interrogation, un point d'exclamation ou un deux-points désactivent la continuation. (Outlook suppose que c'est la fin d'une phrase?) 
  • Les lignes qui désactivent la continuation commencent par un saut de ligne, mais sont réactivées si leur longueur est supérieure à 40 caractères. 
  • Les lignes qui commencent ou se terminent par un onglet désactivent la continuation. 
  • Les lignes qui commencent par 2 espaces ou plus désactivent la continuation. 
  • Les lignes qui se terminent par 3 espaces ou plus désactivent la continuation. 

Veuillez noter que j'ai essayé tout cela avec Outlook 2007. YMMV.
Donc, si possible, terminez tous les éléments avec une marque de ponctuation, une tabulation ou même trois espaces.

173
mtruesdell

Vous pouvez forcer un saut de ligne dans Outlook lorsque vous attachez un (ou deux?) Caractères (\ t) juste avant le saut de ligne (CRLF).

Exemple:

This is my heading in the mail\t\n
Just here Outlook is forced to begin a new line.

Cela semble fonctionner avec Outlook 2010. Veuillez vérifier si cela fonctionne avec d'autres versions.

Voir aussi Outlook: nettoyage automatique de ma ligne et cassure du format de courrier électronique

26
stephg

Microsoft Outlook 2002 et versions ultérieures supprime les "sauts de ligne supplémentaires" des messages texte par défaut (kb308319) . En d'autres termes, Outlook semble simplement ignorer les séquences de saut de ligne et/ou de retour chariot dans les messages texte, en exécutant toutes les lignes ensemble.

Cela peut poser des problèmes si vous essayez d'écrire du code qui générera automatiquement un message électronique à lire par une personne utilisant Outlook.

Par exemple, supposons que vous souhaitiez fournir des informations distinctes sur des lignes distinctes, par souci de clarté, comme ceci:

La transaction a besoin d'attention!
Date de publication: 30/01/2009
Montant: 12 222,06 $
TransID: 8gk288g229g2kg89
Code postal: 91543

Votre destinataire Outlook verra toutes les informations écrasées, comme suit:

La transaction a besoin d'attention! Date de publication: 30/01/2009 Montant: 12 222,06 USD Numéro de transaction: 8gk288g229g2kg89 Code postal: 91543

Il ne semble pas y avoir de solution facile. Les alternatives sont:

  1. Vous pouvez fournir deux ensembles de sauts de ligne entre chaque ligne. Cela empêche Outlook de combiner les lignes sur une ligne, mais il affiche ensuite une ligne vierge supplémentaire entre chaque ligne (ce qui crée le problème opposé). Par "fournir deux ensembles de sauts de ligne", vous devez utiliser "\ r\n\r\n" ou "\ r\r" ou "\ n\n" mais pas "\ r\n" ou "\ n\r ".
  2. Vous pouvez fournir deux espaces au début de chaque ligne du corps de votre message électronique. Cela évite d'introduire une ligne vierge supplémentaire entre chaque ligne. Mais cela fonctionne mieux si chaque ligne de votre message est assez courte, parce que l'utilisateur peut prévisualiser le texte dans une fenêtre Outlook très étroite qui entoure la fin de chaque ligne jusqu'à la première position de la ligne suivante. aligner avec vos lignes en retrait de deux espaces. Cette stratégie a été utilisée pour certains newsletters .
  3. Vous pouvez renoncer à utiliser un format de texte brut et utiliser un format html.
23
user60849

J'ai eu le même problème et j'ai trouvé une solution. Essayez ceci: %0D%0A pour ajouter un saut de ligne.

11
Mark

J'ai utilisé le saut de ligne HTML au lieu de "\ n". Cela a bien fonctionné.

3
rashini

L'ajout de "\ t\r\n" (\ t pour TAB) au lieu de "\ r\n" a fonctionné pour moi sur Outlook 2010. Note: ajouter 3 espaces à la fin de chaque ligne fait aussi la même chose mais ça ressemble à un hack de programmation!

2
supernova

J'avais eu du mal avec toutes les solutions ci-dessus et rien n'y faisait, car j'avais utilisé une variable String (texte brut d'un JTextPane) en combinaison avec le formatage "text/html" dans ma bibliothèque de courrier électronique.

Donc, la solution à ce problème consiste à utiliser "text/plain", au lieu de "text/html" et ne nécessite aucun remplacement des caractères de retour:

MimeBodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setContent(message, "text/plain");
1
DreamZeppelin

Etant donné qu’il s’agit d’une requête, seul le pourcentage de caractères d'échappement utilisés fonctionne, ce qui signifie que% 0A vous donne un saut de ligne. Par exemple,

<a href="mailto:[email protected]?Subject=TEST&body=Hi there,%0A%0AHow are you?%0A%0AThanks">email to me</a>
1
Lingfa

Mettez le texte dans <pre> Tags et Outlook formatera et affichera le texte correctement. 

je l'ai défini dans CSS inline 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>
1
Christian Casutt

Pour Outlook 2010 et les versions ultérieures, utilisez\ t\nplutôt que\r\n.

1
rkg

L'astuce consiste à utiliser la fonctionnalité encodeURIComponent() de js:

var formattedBody = "FirstLine \n Second Line \n Third Line";
var mailToLink = "mailto:[email protected]?body=" + encodeURIComponent(formattedBody);

RÉSULTAT:

FirstLine
SecondLine
ThirdLine
1
AlCoPaine

Vous devez envoyer des emails HTML. Avec <br />s dans l'e-mail, vous aurez toujours vos sauts de ligne.

1
hova

J'ai également eu ce problème avec le type de courrier brut/texte. Le fil de texte \f a fonctionné pour moi. 

0
Abhinav

Ceci doit être utile pour vous. essayez "% 0A" au lieu de "\ n". La vraie source est ici.

Vous devez ajouter "% 0A" à chaque fois que vous avez besoin d'une nouvelle ligne dans votre code. Dans ton cas 

 abcParameters.put(defConstants.REPORT_MESSAGE, "Invalid file sent by tt. Hence ffgghh  was unable
              to process it : " + s+ "%0A" +e.getMessage().toString());
0
Karthikeyan

si le message est text/plain,\r\n devrait fonctionner; si le type de message est text\html, utilisez < p/>

0
lwpro2

Essayez \r\c au lieu de \n.

EDIT: Je pense que @ Robert Wilkinson avait raison. \r\n. La mémoire n'est plus ce qu'elle était.

0
EBGreen

Le \n fonctionne largement pour nous, mais Outlook se charge parfois de supprimer les sauts de ligne, comme vous le dites.

0
cagcowboy

si le travail doit être effectué avec du texte formaté sans codage HTML . il peut être facilement obtenu avec le scénario suivant qui crée un élément div à la volée et utilise un élément <pre></pre> html pour conserver le formatage.

var email_body = htmlEncode($("#Body").val());

 function htmlEncode(value) {
    return "<pre>" + $('<div/>').text(value).html() + "</pre>";
}
0
Lyubomyr

Essaye ça:

message.setContent(new String(body.getBytes(), "iso-8859-1"),
                    "text/html; charset=\"iso-8859-1\"");

Cordialement, .__ Mohammad Rasool Javeed

0

RÉSOLU DANS MA DEMANDE

Dans ma candidature, j'essayais d'envoyer un courrier électronique dont le corps du message avait été saisi par l'utilisateur dans la zone de texte. Lors de l'envoi du courrier, Outlook supprimait automatiquement le saut de ligne saisi par l'utilisateur.

par exemple si l'utilisateur est entré
Yadav
Mahesh

Outlook l'a affiché comme 
YadavMahesh

Résolution: J'ai changé le caractère de saut de ligne "\ r\n" avec "\ par" (n'oubliez pas de placer un espace à la fin du code RTF ""\par ") et les sauts de ligne sont restaurés.

À votre santé,
Mahesh

0
Mahesh Yadav

\r\n ne fonctionnera que si vous définissez le type de corps en tant que texte.

message.setBody(MessageBody.getMessageBodyFromText(msg));
BodyType type = BodyType.Text;
message.getBody().setBodyType(type);
0
vik

Si vous pouvez ajouter un '.' (point) à la fin de chaque ligne, cela semble empêcher Outlook de gâcher le formatage du texte.

0
monojohnny

J'ai une bonne solution que j'ai essayée, il suffit d'ajouter le caractère (13) en fin de ligne comme dans l'exemple suivant:

Dim S As String
 S = "Some Text" & Chr(13)
 S = S + "Some Text" & Chr(13)
0
Mohamed Selim

J'ai également eu ce problème avec le type de courrier simple/texte. Auparavant, j’utilisais "\ n\n" mais il y avait deux sauts de ligne. Ensuite, j'ai utilisé "\ t\n" et cela a fonctionné. J'utilisais StringBuffer en Java pour ajouter du contenu.
Le contenu a été imprimé à la ligne suivante du courrier Outlook 2010.

0
thiru

Vous devez parfois entrer\r\n deux fois pour forcer Outlook à faire la pause.

Cela ajoutera une ligne vide mais toutes les lignes auront une pause.

0
fjkjava