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?
\r\n
. Es hat bei mir funktioniert.Antworten:
Beginnen Sie jede Zeile mit 2 Leerzeichen und Outlook wird "ausgetrickst", um Ihre Formatierung beizubehalten.
Also ändere dich
zu
Hier ist der Artikel, den ich bei der Untersuchung dieses Problems gefunden habe und der etwas tiefer geht als meine Antwort.
quelle
Regex.Replace(messageBody, @"^(?!\s\s)", " ", RegexOptions.Multiline);
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.)
quelle
Regex.Replace(messageBody, @"(?<!\t)((?<!\r)(?=\n)|(?=\r\n))", "\t", RegexOptions.Multiline)
In dieser Antwort erfahren Sie, wie Sie die Funktion im Outlook-Client "deaktivieren".
Zu Ihrer Information: Ich verwende Outlook 2007
quelle
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).
quelle
Das Hinzufügen von "\ t \ r \ n" (\ t für TAB) anstelle von "\ r \ n" hat in Outlook 2010 für mich funktioniert.
quelle
"\r\n "
(zwei Leerzeichen, kein Tabulator) nach dem Zeilenumbruch als ähnlichen Hack "gelöst" . Funktioniert in Outlook 2016. YMMV.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:
quelle
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
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:
Ich habe die Schriftfamilie so definiert, dass sie gesetzt werden muss.
HTML:
quelle
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.
quelle
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.
quelle
Ä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.
quelle