Outlook bereinigt meine Zeilenumbrüche automatisch und vermasselt mein E-Mail-Format

119

Ich sende eine E-Mail mit dem Dotnet-Framework. Hier ist die Vorlage, mit der ich die Nachricht erstelle:

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%

Wenn die Nachrichten in Outlook empfangen werden, sagt Outlook "Zusätzliche Zeilenumbrüche in dieser Nachricht wurden entfernt". Und die Meldung wird folgendermaßen angezeigt:

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

Beachten Sie, wie Outlook erforderliche Zeilenumbrüche nach dem Namen, EECoverageAmount usw. falsch entfernt.

Es ist wichtig, dass die E-Mail-Empfänger eine korrekt formatierte E-Mail erhalten, und ich muss davon ausgehen, dass einige von ihnen Outlook 2003 verwenden. Ich kann auch nicht davon ausgehen, dass sie genug wissen, um die Autoclean-Funktion auszuschalten, damit die Nachricht ordnungsgemäß formatiert wird.

Ich habe diese Nachrichten in anderen E-Mail-Clients angezeigt und sie werden korrekt angezeigt

Weitere Informationen:

  • Ich verwende UTF-8 BodyEncoding (msg.BodyEncoding = System.Text.Encoding.UTF8)
  • Der msg.Body wird aus einer UTF-8-codierten Textdatei gelesen, und jede Zeile wird mit einem crlf abgeschlossen.

Frage: Wie ändere ich das Format der Nachricht, um dieses Problem zu vermeiden?

Aheho
quelle
12
Während die beiden unten stimmigen Antworten richtig sind, finden Sie in dieser Antwort eine Liste aller Regeln.
Bobson
5
Warum gibt es diese "Funktion" überhaupt?
ChiliNUT
1
Versuchen Sie Windows Newlines : \r\n. Es hat bei mir funktioniert.
Kevinarpe

Antworten:

97

Beginnen Sie jede Zeile mit 2 Leerzeichen und Outlook wird "ausgetrickst", um Ihre Formatierung beizubehalten.

Also ändere dich

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%

zu

  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

Hier ist der Artikel, den ich bei der Untersuchung dieses Problems gefunden habe und der etwas tiefer geht als meine Antwort.

Alex B.
quelle
6
Hier ist ein praktischer Regex, um dies zu klären:Regex.Replace(messageBody, @"^(?!\s\s)", " ", RegexOptions.Multiline);
Wilfred Knievel
2
Ok, in dieser Regex gibt es zwei Leerzeichen, aber da es sich um HTML handelt, wird nur eines angezeigt!
Wilfred Knievel
Für Code-generierte Nur-Text-E-Mails ist dies die beste Lösung.
Salvador Valencia
129

Sie können auch ein Tabulatorzeichen am Ende der Zeile (kurz vor dem CR LF) einfügen . Dieser zusätzliche Leerraum befindet sich am Ende der Zeile und ist daher für den Benutzer nicht sichtbar. Möglicherweise möchten Sie dies vorziehen, indem Sie links Leerzeichen einfügen müssen. Beachten Sie, dass ein einzelnes Leerzeichen nicht ausreicht (obwohl vielleicht mehrere Leerzeichen helfen würden, weiß ich nicht.)

Jim Davis
quelle
14
Regex.Replace(messageBody, @"(?<!\t)((?<!\r)(?=\n)|(?=\r\n))", "\t", RegexOptions.Multiline)
Wilfred Knievel
Perfekte Lösung für E-Mails, die von Trac an Outlook-Benutzer gesendet werden.
Sfarbota
1
+1 Ich musste 3 Leerzeichen anstelle eines Tabulators verwenden, aber im Grunde funktionierte dieser Fix für mich: Regex.Replace (messageBody, @ "(? <! \ T) ((? <! \ R) (? = \ N) | (? = \ r \ n)) "," ", RegexOptions.Multiline)
Ryan VandenHeuvel
Bestätigt! Hier Regex als PHP-Snippet: $ re = '/ (? <! \ T) ((? <! \ R) (? = \ N) | (? = \ R \ n)) / m'; $ subst = ""; $ MailText = preg_replace ($ re, $ subst, $ MailText);
C4pt4inC4nn4bis
Funktioniert für Outlook, unterbricht jedoch Text-Mails auf dem Samsung Mail-Client für Smartphones :(
C4pt4inC4nn4bis
26

In dieser Antwort erfahren Sie, wie Sie die Funktion im Outlook-Client "deaktivieren".

  • Gehen Sie zu Extras -> "Optionen ..."
  • Klicken Sie auf der Registerkarte "Einstellungen" auf "E-Mail-Optionen ...".
  • Deaktivieren Sie das Kontrollkästchen "Zusätzliche Zeilenumbrüche in Nur-Text-Nachrichten entfernen".
  • Klicken Sie auf OK

Zu Ihrer Information: Ich verwende Outlook 2007

DHornpout
quelle
3
Diese Funktion gefällt mir auch nicht. Unter anderem wird der Code in E-Mails beschädigt und die PGP-Signaturprüfungen schlagen fehl.
Brian Reiter
7
In Outlook 2010 heißt es: Datei> Optionen> E-Mail> Scrollen Sie nach unten zum Abschnitt "Nachrichtenformat"> Deaktivieren Sie das Kontrollkästchen "Zusätzliche Zeilenumbrüche in Nur-Text-Nachrichten entfernen".
Peter Ford
2
Dies ist eine clientseitige Lösung. Viel besser wäre eine zuverlässige Methode, um Outlook daran zu hindern, dies auf der Serverseite zu tun, dh indem die E-Mails so formatiert werden, dass andere Clients nicht gestört werden (da Sie nicht wissen, welchen E-Mail-Client der Empfänger verwenden wird).
Tobias
7
Vielen Dank - und jetzt führen Sie bitte unsere über 100.000 Newsletter-Empfänger dazu
Muleskinner
4

Ich hatte immer besseres Glück, E-Mails als HTML zu formatieren. Möglicherweise haben Sie immer noch das Problem des Endbenutzers, dass Sie den Client so einstellen müssen, dass er das HTML-Format zulässt, aber sie sind normalerweise besser damit vertraut, da so viele E-Mails im HTML-Format vorliegen. Sie haben auch etwas mehr Arbeit an Ihrem Ende, indem Sie die HTML-Tags hinzufügen, aber das Endergebnis ist viel kontrollierbarer.

@ephemient schlägt außerdem vor: Als HTML und Klartext senden. Gute Kunden werden Letzteres zeigen, Outlook wird Ersteres zeigen, alle sind glücklich (außer dem Programmierer, der mehr arbeiten muss).

Doug L.
quelle
2
Senden Sie sowohl als HTML als auch als Klartext. Gute Kunden werden Letzteres zeigen, Outlook wird Ersteres zeigen, alle sind glücklich (außer dem Programmierer, der mehr arbeiten muss).
Ephemient
Übrigens, s / http / html / g in Ihrer Antwort.
Ephemient
4

Das Hinzufügen von "\ t \ r \ n" (\ t für TAB) anstelle von "\ r \ n" hat in Outlook 2010 für mich funktioniert.

Supernova
quelle
Ich habe dies mit "\r\n "(zwei Leerzeichen, kein Tabulator) nach dem Zeilenumbruch als ähnlichen Hack "gelöst" . Funktioniert in Outlook 2016. YMMV.
user2864740
1

Erweiterung der Doug L- Antwort, da HTML-Nachrichten meiner Meinung nach jetzt noch allgegenwärtiger und akzeptierter sind als 2008, als diese Antwort veröffentlicht wurde. Hier ist ein kleines c # -Schnipsel, mit dem Sie den Text konvertieren und die Nachricht im HTML-Format senden können:

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);
Ho Ho Ho
quelle
0

Ich sehe das gleiche Problem, wenn ich eine Nur-Text-E-Mail generiere und sie dann mit Outlook 2003 SP3 lese. Es scheint, dass Sie den Entfernungsprozess vermeiden können, indem Sie die Zeilenlänge unter 40 Zeichen halten. Kann nicht immer praktisch sein.


quelle
0

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

Ich definierte es in CSS Inline in HTML Body wie:

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
1
Ich glaube, die ursprüngliche Frage bezieht sich auf Klartext-E-Mails, nicht auf HTML. Sie versuchen, HTML als Lösung einzumischen.
Chris Peters
0

Die automatische Reinigung ist eine Outlook-Funktion, mit der zusätzliche Zeilenumbrüche entfernt werden. Sie können dies auf zwei Arten verhindern.

  • Der erste Weg besteht darin, mindestens 2 zusätzliche Leerzeichen vor den Zeilen hinzuzufügen, während die E-Mail per Code gesendet wird. Sie können diese zusätzlichen Leerzeichen nur vor den Zeilen hinzufügen, die Outlook automatisch entfernt.

  • Die zweite Möglichkeit besteht darin, die Outlook-Einstellung zu ändern , um zu verhindern, dass Outlook zusätzliche Zeilenumbrüche entfernt.

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Brijesh Kumar Tripathi
quelle
-1

Mein Text enthält '\ r \ n', aber Outlook 2010 rendert keinen Zeilenumbruch. Erstellen Sie Token mit Zeilen, die durch '\ r \ n' begrenzt sind, und Umschlagstoken mit HTML-Absatz-Tags. Mein E-Mail-Format ist HTML. Ich generiere HTML Body für meine E-Mail im folgenden Code.

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();
     }
  }
Keyur Patel
quelle
-6

Ändern Sie Ihren Leitungsabschluss von crlf in cr oder lf.

Ich vermute, dass oben in der E-Mail nur cr (oder lf) verwendet wird und Outlook erwartet, dass der Rest der E-Mail dem gleichen Format folgt.

Seanyboy
quelle
Ich habe versucht, den Leitungsabschluss in einen CR zu ändern. Das hat nicht funktioniert. Dann habe ich versucht, es in ein LF zu ändern. Das hat auch nicht funktioniert.
Aheho
1
Zweifelhaft. Outlook verfügt über eine höchst zweifelhafte Funktion, mit der versucht wird, E-Mails mit harten Zeilenumbrüchen in fließenden Text umzuwandeln. Es ist nicht überraschend, dass dies häufig falsch ist, wie in diesem Fall.
Daniel Cassidy