Senden von Formatierten HTML-E-Mails
Ich habe eine text-Datei output.txt, die hat folgenden Inhalt:
OPERATINGSYSTEM PROJECTSERVER1 PROJECTSERVER2
Windows 1.36 4.42
Linux12 2.78 5.76
MacOS 3.45 6.39
Ubuntu 4.12 0.00
Android 0.00 3.46
FreePhysicalMemory 30.12 31.65
TotalVisibleMemorySize 48.00 48.00
CPULoadPercentage 2 4
Ich möchte zum senden von Inhalt von output.txt in einer E-Mail als ein Körper in Formatierte HTML-Tabelle look-in Windows server 2008 R2. Ich versuche mit folgenden code, aber es funktioniert nicht für mich..wo bin ich irrtümlich unten ?
$smtpServer = "[email protected]"
$smtpFrom = "[email protected]"
$smtpTo = "[email protected]"
$messageSubject = "Servers Memory"
$message = New-Object System.Net.Mail.MailMessage $smtpfrom, $smtpto
$message.Subject = $messageSubject
$message.IsBodyHTML = $true
$message.Body = Get-Content C:\Logs\output.txt
$style = "< style>BODY{font-family: Arial; font-size: 10pt;}"
$style = $style + "TABLE{border: 1px solid black; border-collapse: collapse;}"
$style = $style + "TH{border: 1px solid black; background: #dddddd; padding: 5px; }"
$style = $style + "TD{border: 1px solid black; padding: 5px; }"
$style = $style + "< /style>"
$smtp = New-Object Net.Mail.SmtpClient($smtpServer)
$smtp.Send($message)
EDIT1
Wenn ich Sie modifiziert habe meinen code wie folgt:
$smtpServer = "[email protected]"
$smtpFrom = "[email protected]"
$smtpTo = "[email protected]"
$messageSubject = "Servers Memory"
$message = New-Object System.Net.Mail.MailMessage $smtpfrom, $smtpto
$message.Subject = $messageSubject
$message.IsBodyHTML = $true
$style = "<style>BODY{font-family: Arial; font-size: 10pt;}"
$style = $style + "TABLE{border: 1px solid black; border-collapse: collapse;}"
$style = $style + "TH{border: 1px solid black; background: #dddddd; padding: 5px; }"
$style = $style + "TD{border: 1px solid black; padding: 5px; }"
$style = $style + "</style>"
$message.Body = "<head><pre>$style</pre></head>"
$message.Body += Get-Content C:\Logs\output.txt
$smtp = New-Object Net.Mail.SmtpClient($smtpServer)
$smtp.Send($message)
Bekomme ich post wie diese:
OPERATING SYSTEM SERVER1 SERVER2 Windows 1.36 4.42 Linux 2.78 5.76 MacOS 3.45 6.39 Android 0.00 3.46 Ubuntu 4.12 0.00 FreePhysicalMemory 30.12 31.65 TotalVisibleMemorySize 48.00 48.00
Hinweis: ich bin mit Powershell v1.0
1. "Funktioniert nicht" in welcher Weise? Je spezifischer Sie sind, desto wahrscheinlicher wird in der Lage sein, das problem zu identifizieren. 2. Was sind Ihre Absichten für $style? Sie setzen Sie dessen Wert auf eine Reihe von CSS-code, aber dann bist du nicht etwas zu tun mit es. Es scheint, dass es sollte so etwas wie
$message.Body = '<head>' + $style + '</head>' + $message.Body
zwischen der letzten $style = [...]
- Anweisung und die $smtp = [...]
- Anweisung. 3. output.txt nicht HTML enthalten. Es sollte die HTML-Tabelle Daten, da sonst die Formatierung werden alle falsch. Ist es das, was "funktioniert nicht"?InformationsquelleAutor Sunny | 2013-10-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Okay, die Frage ist ein wenig unklar, aber ich werde einen Stich an es basiert auf dem, was ich folgern, ist "nicht für Sie arbeiten". Ich vermute, dass dein script ist erfolgreich, die die Nachricht sendet, und was nicht funktioniert ist, dass die Formatierung der Nachricht ist alles falsch, aus zwei Gründen:
$message.IsBodyHTML = $true
zu konvertieren nur-text-Eingabe für HTML, aber das ist nicht das, was es tut. Es setzt lediglich eine Eigenschaft der Nachricht, weist E-mail-clients interpretieren den Körper als HTML (genauer gesagt, es setzt den Content-Type-header "text/html"), aber Sie haben, um tatsächlich zu liefern, die es HTML-code.output.txt sollte wie folgt Aussehen:
Das PowerShell-Skript sollte wie folgt Aussehen:
Wenn Sie nicht bieten können, output.txt in HTML, da es automatisch generiert werden, im Klartext, dann wird das Skript konvertieren zu müssen. Wenn das format ist konsequent, wie gezeigt, in Ihrem Beispiel, das ist nicht zu kompliziert. Ersetzen Sie die
$message.Body =
:Wie dem auch sein mag, es ändert nichts an der Tatsache, dass, wenn Sie nicht das HTML-input, Sie erhalten nicht die HTML-Ausgabe (Sie wissen schon...der GIGO-Prinzip). Alle IsBodyHTML - Eigenschaft nicht festgelegt ist die Content-Type - header zu
text/html
, die beauftragt Kunden zu interpretieren, den Körper als HTML. Die Ergebnisse, die Sie geschrieben in Ihrem update sind genau das, was ich beschrieben, dass man durch die output.txt als HTML--keine Zeilenumbrüche und whitespace-Zeichen reduziert, um einzelne Leerzeichen. Wenn Sie nicht ändern Sie das Skript, das generiert output.txt, müssen Sie die PowerShell-Skript konvertieren, um HTML.Eigentlich ist das, was ich entdeckt habe ist, dass Sie nicht zuverlässig zählen ein style sheet in eine E-Mail. Die Formatvorlagen werden inline-oder die meisten Kunden ignorieren.
InformationsquelleAutor Adi Inbar