Outlook, Powershell und Zeilenumbrueche

Ranayna

Admiral
Registriert
Mai 2019
Beiträge
8.545
Hallo zusammen,

irgendwie ist Outlook komisch (Aber wem sag ich das :P )
Aus einem Powershell Script heraus schreibe ich eine Email. Dutzende Male eingerichtet, funktioniert auch prinzipiell alles.
Aber in diesem einen Fall macht Outlook komische Sachen mit den Zeilenumbruechen.

Folgender C# "Pseudocode"

C#:
[...]
$emailBody = ""
$emailBody += "Script running at " + (Get-Date) + "`r`n"
$emailBody += "Script running on $env:computername`r`n"
[...]
foreach ($item in $items)
{
    $emailBody += "Text1 " + $item.Eigenschaft1 + " Text2 " + $item.Eigenschaft2 + "`r`n"
}
[...]

Anschliessend wird per Send-MailMessage die Mail abgeschickt.

Die ersten beiden Zeilenumbrueche werden mir sauber im Outlook angezeigt.
Aber die im foreach werden von Outlook "gefressen". Alles was ueber das foreach in den Body der Mail geschrieben wird zeigt Outlook mir in einer einzelnen gewrappten Zeile an. In den Emails habe ich oben ein Banner stehen "We removed extra line breaks from this message". Da kann ich draufklicken, dann werden die Zeilenumbruecke wiederhergestellt.
Fuege ich zum testen ein zuesaetzliches `r`n hinzu, egal ob in der gleichen Zeile oder als zusaetzliche , habe ich doppelte Zeilenumbrueche in der Email.

Jetzt das Wilde: In einem anderen Script mache ich es fast genauso den Emailbody zusammenzubauen.
Der Unterschied: Anders als im Snippet oben, habe ich da folgendes im foreach:

C#:
$emailBody += "Backup of $systemName completed`r`n"

Wo $systemName ein einfacher String ist.
Im oberen Script hilft es nicht, wenn ich per $item.Eigenschaft.ToString() vor dem zusammenbau des Strings durchfuehre.

Ja, ich weiss, dass ich das Verhalten von Outlook umstellen kann. Aber die Mails gehen nicht nur an mich, sondern auch noch ein paar andere Leute, da will ich nicht allen hinterherlaufen.
Weil ich weiss, dass das richtig funktionieren kann, wuerde ich echt gern wissen was die Ursache fuer dieses Verhalten ist.
 
Ich gehe mal davon aus, dass Outlook evtl. HTML erwartet.

Was passiert, wenn du "<br>" versuchst?
 
  • Gefällt mir
Reaktionen: derlorenz
Outlook zeigt die kaputte Email, genauso wie die funktionierende Email, jedenfalls nicht als nativ Plaintext an, das stimmt.
Ich kann natuerlich versuchen das mit HTML zu machen, ich wuerde aber lieber verstehen was der Unterschied ist.
 
Wie sieht den der Text aus, wenn du den Code in der IDE laufen lässt, und du ihn da ausgibst?
Wär noch interessant, was ein anderer Mailclient anzeigt.
 
Kann leider nicht direkt helfen. Allerdings erinnere ich mich auch an Umbruchprobleme mit Plaintext-Mails aus Powershell, weswegen ich dann einfach auf HTML umgebaut habe.

Hast du dir mal den Quelltext in Outlook anzeigen lassen? Kann man da Unterschiede erkennen?
 
Dreia schrieb:
Wie sieht den der Text aus, wenn du den Code in der IDE laufen lässt, und du ihn da ausgibst?
Zeilenumbrueche sind da wenn ich mir $emailBody auf der Konsole ausgeben lasse.
Die Zeilenumbrueche kommen ja auch bei Outlook an. Das ist ja nur der Meinung das die ueberfluessig sind.

Ich muss mich uebrigends korrigieren, die Mail liegt Outlook anscheinend doch als Plain Text vor. Steht so zumindest im Titel des Fensters wenn ich die Mail oeffne.
Das ist bei der funktionierenden Mail genauso.

Ich hab jetzt noch getestet und vermute aktuell, das der Outlookautomatismus mit der Laenge der Zeile zu tun hat. Nehme ich naemlich nur den Anfang der Zeile bis einschliesslich der ersten Variable, sind die Zeilenumbrueche da.
 
Ranayna schrieb:
Aus einem Powershell Script heraus
Wie ist das Skript denn kodiert?
Wahrscheinlich ANSI oder UTF-8.

Konvertiere es mal nach UTF-8-BOM, dann sollten diese Probleme behoben sein.
Ich habe ein ähnliches Skript in Nutzung und bei mir werden die Umbrüche korrekt übernommen.
 
  • Gefällt mir
Reaktionen: Ranayna
LotusXXL schrieb:
Konvertiere es mal nach UTF-8-BOM, dann sollten diese Probleme behoben sein.
Auf dem Server laeuft leider noch Powershell 5.1, was im Gegensatz zu neueren Versionen wohl kein UTF-8-BOM kann...
https://learn.microsoft.com/en-gb/p...end-mailmessage?view=powershell-5.1#-encoding

https://learn.microsoft.com/en-gb/p...end-mailmessage?view=powershell-7.5#-encoding

Hab mit allen Encodings getestet die verfuegbar sind, immer das gleiche Ergebnis.
Sod it... Schon zuviel Zeit reingesteckt... Dann bleibt es so.

Nachtrag: Und es lies mir trotzdem keine Ruhe :P Einen anderen Server genommen wo 7.4 auch installiert ist, Script kopiert, diesmal utf8BOM Encoding ausgewaehlt: Keine Aenderung, sieht im Outlook genauso aus.

Nu aber Haken dran :P
Ergänzung ()

Und weil ich einfach verdammich die Finger nicht davon lassen konnte, habe ich jetzt doch noch einen "Wuerg-around" gefunden.

https://stackoverflow.com/questions...ok-will-print-the-line-breaks/1638608#1638608
Drei Leerzeichen in den String eingebaut vor dem Zeilenumbruch, und sofort funktioniert es.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: LotusXXL
Zurück
Oben