Wie formatiere ich einen String in einer E-Mail, damit Outlook die Zeilenumbrüche druckt?

75

Ich versuche, eine E-Mail in Java zu senden, aber wenn ich den Text der E-Mail in Outlook lese, werden alle meine Zeilenumbrüche beseitigt. Ich setze \ n an die Enden der Zeilen, aber gibt es noch etwas Besonderes, das ich tun muss? Die Empfänger verwenden immer Outlook.

Ich habe auf microsoft.com eine Seite gefunden, auf der steht, dass es in Outlook die Funktion "Zeilenumbrüche entfernen" gibt. Bedeutet dies, dass es keine andere Lösung gibt, als diese Einstellung zu deaktivieren?

Vielen Dank

MattGrommes
quelle

Antworten:

28

Sie müssen \r\nals Lösung verwenden.

Robert Wilkinson
quelle
25
Dies kann zwar dazu beitragen, eine Zeile einfach in \ r \ n zu beenden, garantiert jedoch nicht, dass Outlook den Zeilenumbruch beibehält.
GaussZ
5
Wenn der Nachrichtentyp text \ html ist, verwenden Sie <p />
lwpro2
Für Text / HTML habe ich alles ausprobiert <br>, <br />, / n, / r / n .... Immer noch nicht in der Lage, eine neue Zeile in meiner Outlook-E-Mail zu erhalten
Noosphere
\ t \ n funktioniert für mich unter Outlook2010. @ Noosphere scheint, Sie haben den falschen Schrägstrich.
Man Coding
193

Ich habe heute gerade damit gekämpft. Nennen wir das Verhalten beim Entfernen der zusätzlichen Zeilenumbrüche "Fortsetzung". Ein wenig experimentieren ergibt folgendes Verhalten:

  • Jede Nachricht beginnt mit der Fortsetzung aus.
  • Zeilen mit einer Länge von weniger als 40 Zeichen lösen keine Fortsetzung aus. Wenn die Fortsetzung aktiviert ist, werden die Zeilenumbrüche entfernt.
  • Zeilen mit 40 Zeichen oder mehr aktivieren die Fortsetzung. Es bleibt eingeschaltet, bis ein Ereignis eintritt, um es auszuschalten.
  • Zeilen, die mit einem Punkt, einem Fragezeichen, einem Ausrufezeichen oder einem Doppelpunkt enden, deaktivieren die Fortsetzung. (Outlook geht davon aus, dass es das Ende eines Satzes ist?)
  • Zeilen, die die Fortsetzung deaktivieren, beginnen mit einem Zeilenumbruch, schalten die Fortsetzung jedoch wieder ein, wenn sie länger als 40 Zeichen sind.
  • Zeilen, die mit einer Registerkarte beginnen oder enden, deaktivieren die Fortsetzung.
  • Zeilen, die mit 2 oder mehr Leerzeichen beginnen, deaktivieren die Fortsetzung.
  • Zeilen, die mit 3 oder mehr Leerzeichen enden, deaktivieren die Fortsetzung.

Bitte beachten Sie, dass ich dies alles mit Outlook 2007 versucht habe. YMMV.
Beenden Sie daher nach Möglichkeit alle Aufzählungszeichen mit einem Satzzeichen, einem Tabulator oder sogar drei Leerzeichen.

mtruesdell
quelle
5
Wirklich gute Antwort. Besonders die Tatsache, dass 3 Leerzeichen am Ende Stop Outlook sind, ist gut zu wissen (und an vielen Stellen im Internet nicht zu finden).
Legolas
5
Dies ist die Antwort, die beim Öffnen von Outlook automatisch als Startbildschirm angezeigt werden sollte.
Andrius Naruševičius
2
Warum ist das nirgendwo dokumentiert? Dies ist eine sehr nützliche Information. Vielen Dank für die Recherche!
Bobson
4
+1 für "Zeilen, die mit 3 oder mehr Leerzeichen enden, deaktivieren die Fortsetzung." Dies war für mich effektiv, um sicherzustellen, dass Outlook eine neue Zeile für kurze Zeilen rendert.
Saille
Du hast meine Nacht gerettet! Danke vielmals!
Vitalii Vitrenko
27

Sie können einen Zeilenumbruch in Outlook erzwingen, wenn Sie ein (oder zwei?) Tabulatorzeichen (\ t) unmittelbar vor dem Zeilenumbruch (CRLF) anhängen.

Beispiel:

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

Es scheint unter Outlook 2010 zu funktionieren. Bitte testen Sie, ob dies mit anderen Versionen funktioniert.

Siehe auch Outlook, das meine Zeilenumbrüche automatisch reinigt und mein E-Mail-Format durcheinander bringt

stephg
quelle
Danke vielmals. Gemäß Ihrem Tipp verwende ich "\ t" + Environment.NewLine, um jede neue Zeile zu starten. Es funktioniert zumindest für Outlook 2013, das ich verwende.
Hong
24

Microsoft Outlook 2002 und höher entfernt standardmäßig "zusätzliche Zeilenumbrüche" aus Textnachrichten (kb308319) . Das heißt, Outlook scheint Zeilenvorschub- und / oder Wagenrücklaufsequenzen in Textnachrichten einfach zu ignorieren und alle Zeilen zusammen auszuführen.

Dies kann zu Problemen führen, wenn Sie versuchen, Code zu schreiben, der automatisch eine E-Mail-Nachricht generiert, die von jemandem gelesen wird, der Outlook verwendet.

Angenommen, Sie möchten aus Gründen der Übersichtlichkeit separate Informationen in separaten Zeilen bereitstellen:

Transaktion braucht Aufmerksamkeit!
PostedDate: 1/30/2009
Betrag: $ 12,222.06
TransID: 8gk288g229g2kg89
Postleitzahl: 91543

Ihr Outlook-Empfänger sieht die Informationen wie folgt zusammengeschlagen:

Transaktion braucht Aufmerksamkeit! Veröffentlicht am: 30.01.2009 Betrag: 12.222,06 USD TransID: 8gk288g229g2kg89 Postleitzahl: 91543

Es scheint keine einfache Lösung zu geben. Alternativen sind:

  1. Sie können zwischen jeder Zeile zwei Sätze von Zeilenumbrüchen angeben. Dadurch wird Outlook zwar daran gehindert, die Zeilen zu einer Zeile zu kombinieren, es wird jedoch eine zusätzliche Leerzeile zwischen den einzelnen Zeilen angezeigt (wodurch das gegenteilige Problem entsteht). Mit "zwei Sätze von Zeilenumbrüchen angeben" meine ich, dass Sie "\ r \ n \ r \ n" oder "\ r \ r" oder "\ n \ n" verwenden sollten, aber nicht "\ r \ n" oder "\ n" \ r ".
  2. Sie können am Anfang jeder Zeile im Text Ihrer E-Mail-Nachricht zwei Leerzeichen angeben. Dadurch wird vermieden, dass zwischen jeder Zeile eine zusätzliche Leerzeile eingefügt wird. Dies funktioniert jedoch am besten, wenn jede Zeile in Ihrer Nachricht ziemlich kurz ist, da der Benutzer möglicherweise eine Vorschau des Texts in einem sehr engen Outlook-Fenster anzeigt, das das Ende jeder Zeile bis zur ersten Position in der nächsten Zeile umschließt, wo dies nicht der Fall ist Richten Sie sich an Ihren Zeilen mit zwei Leerzeichen aus. Diese Strategie wurde für einige Newsletter verwendet .
  3. Sie können die Verwendung eines Nur-Text-Formats aufgeben und ein HTML-Format verwenden.
user60849
quelle
10

Ich hatte das gleiche Problem und fand eine Lösung. Versuchen Sie Folgendes: %0D%0AHinzufügen eines Zeilenumbruchs.

Kennzeichen
quelle
4

Ich habe HTML-Zeilenumbruch anstelle von "\ n" verwendet. Es hat gut funktioniert.

Rashini
quelle
4

Das Hinzufügen von "\ t \ r \ n" (\ t für TAB) anstelle von "\ r \ n" hat in Outlook 2010 für mich funktioniert. Hinweis: Das Hinzufügen von 3 Leerzeichen am Ende jeder Zeile bewirkt dasselbe, aber das sieht aus wie ein Programmier-Hack!

Supernova
quelle
Hat für mich gearbeitet. :-)
Gourav Bhatia
2

Der Trick besteht darin, die encodeURIComponent()Funktionalität von js zu verwenden:

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

ERGEBNIS:

FirstLine
SecondLine
ThirdLine
AlCoPaine
quelle
1

Verwenden Sie für Outlook 2010 und spätere Versionen \ t \ n anstelle von \ r \ n.

rkg
quelle
0

Sie müssen HTML-E-Mails senden. Mit <br />s in der E-Mail haben Sie immer Ihre Zeilenumbrüche.

hova
quelle
0

Wenn Sie ein '.' (Punkt-) Zeichen am Ende jeder Zeile. Dies scheint zu verhindern, dass Outlook die Textformatierung ruiniert.

Monojohnny
quelle
0

Versuchen Sie \r\cstatt \n.

EDIT: Ich denke, @Robert Wilkinson hatte es richtig. \r\n. Das Gedächtnis ist einfach nicht mehr das, was es früher war.

EBGreen
quelle
0

Das \nfunktioniert größtenteils für uns, aber Outlook nimmt es manchmal auf sich, die Zeilenumbrüche zu entfernen, wie Sie sagen.

Cagcowboy
quelle
0

Ich hatte auch dieses Problem mit dem Nur / Text-Mail-Typ. Früher habe ich "\ n \ n" verwendet, aber es gab zwei Zeilenumbrüche. Dann habe ich "\ t \ n" verwendet und es hat funktioniert. Ich habe StringBufferin Java verwendet, um Inhalte anzuhängen.
Der Inhalt wurde in der nächsten Zeile in Outlook 2010-Mail gedruckt.

Thiru
quelle
0

Ich hatte mit all den oben genannten Lösungen zu kämpfen und hier hat nichts geholfen, da ich eine String-Variable (einfacher Text aus einem JTextPane) in Kombination mit der Formatierung "text / html" in meiner E-Mail-Bibliothek verwendet habe.

Die Lösung für dieses Problem besteht also darin, "text / plain" anstelle von "text / html" zu verwenden und keine Rückgabezeichen zu ersetzen:

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

Wenn Sie den Text in <pre>Tags einfügen, wird Outlook formatiert und korrekt angezeigt.

Ich habe es in CSS inline in HTML Body wie folgt definiert:

CSS:

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

Ich habe die Schriftfamilie so definiert, dass sie gesetzt werden muss.

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>
Christian Casutt
quelle
Auch von hier aus: stackoverflow.com/a/24666437/1134961 Einfach in <pre> </ pre> -Tags einbinden .
Technokrat
0

Da es sich um eine Abfrage handelt, funktionieren nur Prozent maskierte Zeichen.% 0A gibt Ihnen einen Zeilenumbruch. Zum Beispiel,

&lt;a href=&quot;mailto:someone@gmail.com?Subject=TEST&amp;amp;body=Hi there,%0A%0AHow are you?%0A%0AThanks&quot;&gt;email to me&lt;/a&gt;
Lingfa
quelle
0

Ich hatte auch dieses Problem mit dem Typ "Nur / Text-Mail". Der Formular-Feed \ffunktionierte für mich.

Abhinav
quelle
0

Manchmal müssen Sie \ r \ n zweimal eingeben, um Outlook für die Pause zu zwingen.

Dadurch wird eine leere Zeile hinzugefügt, aber alle Zeilen werden unterbrochen.

fjkjava
quelle
0

\ r \ n funktioniert erst, wenn Sie den Körpertyp als Text festgelegt haben.

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

Ich hatte das gleiche Problem und hier ist der Code, der es behoben hat:

\t\n - for new line in Email service JavaMailSender

String mailMessage = JSONObject.toJSONString("Your message").replace(",", "\t\n").trim();
Sri
quelle
-1

IN MEINER ANWENDUNG BEHOBEN

In meiner Anwendung habe ich versucht, eine E-Mail zu senden, deren Nachrichtentext vom Benutzer im Textbereich eingegeben wurde. Beim Senden von E-Mails entfernte Outlook automatisch den vom Benutzer eingegebenen Zeilenumbruch.

zB wenn der Benutzer
Yadav eingegeben hat
Mahesh

Outlook zeigte es als
YadavMahesh

Lösung: Ich habe das Zeilenumbruchzeichen "\ r \ n" durch "\ par" geändert (denken Sie daran, das Leerzeichen am Ende des RTF-Codes "\ par" zu drücken), und Zeilenumbrüche werden wiederhergestellt.

Prost,
Mahesh

Mahesh Yadav
quelle
-1

Versuche dies:

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

Grüße, Mohammad Rasool Javeed

Mohammad Rasool Javeed
quelle
-1

Ich habe eine gute Lösung, die ich ausprobiert habe. Fügen Sie einfach das Zeichen (13) am Zeilenende wie im folgenden Beispiel hinzu:

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

Wenn die Nachricht text / plain using ist, sollte \ r \ n funktionieren. Wenn der Nachrichtentyp text \ html ist, verwenden Sie< p/>

lwpro2
quelle
-1

Wenn mit formatiertem Text ohne HTML-Codierung gearbeitet werden muss. Dies kann einfach mit dem folgenden Szenario erreicht werden, in dem das div-Element im laufenden Betrieb erstellt wird und das <pre></pre>HTML-Element verwendet wird, um die Formatierung fortzusetzen.

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

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

Ich bin mir nicht sicher, ob es oben erwähnt wurde, aber Outlook verfügt über eine Kontrollkästcheneinstellung mit dem Namen "Zusätzliche Zeilenumbrüche in Nur-Text-Nachrichten entfernen", die standardmäßig aktiviert ist. Es befindet sich an einer anderen Stelle für verschiedene Versionen von Outlook, aber für 2010 gehen Sie zur Registerkarte "Datei". Wählen Sie "Optionen => Mail". Scrollen Sie nach unten zu "Nachrichtenformat". Deaktivieren Sie das Kontrollkästchen.

user9991046
quelle