L'envoi d'e-mail au format HTML
J'ai un fichier texte output.txt qui a contenu suivant:
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
Je veux envoyer le contenu de output.txt dans un email comme un corps au format HTML apparence de la table dans Windows server 2008 R2. Je suis en train d'essayer avec code ci-dessous, mais sa ne marche pas pour moi ... où suis-je en prenant en dessous ?
$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
Quand j'ai modifié mon code comme ci-dessous:
$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)
Je reçois des mail comme ceci:
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
Note: je suis à l'aide de Powershell v1.0
- 1. "Pas de travail" de quelle manière? Le plus vous êtes précis, plus il est probable que quelqu'un sera en mesure d'identifier le problème. 2. Quelles sont vos intentions concernant $style? Vous êtes à la définition de sa valeur à tout un tas de code CSS, mais alors vous n'êtes pas de faire quelque chose avec elle. Il semble qu'il devrait être quelque chose comme
$message.Body = '<head>' + $style + '</head>' + $message.Body
entre le dernier$style = [...]
déclaration et le$smtp = [...]
déclaration. 3. output.txt ne contient pas le HTML. Il devrait avoir HTML les données de la table, sinon la mise en forme sera tout faux. C'est que ce "pas de travail"?
Vous devez vous connecter pour publier un commentaire.
Ok, la question est un peu floue, mais je vais prendre un coup de couteau à elle fondée sur ce que j'en déduire est "pas de travail pour vous". Je devine que votre script est de réussir à envoyer le message, et ce qui ne marche pas, c'est que la mise en forme du message est tout faux, pour deux raisons:
$message.IsBodyHTML = $true
pour convertir votre saisie de texte brut au format HTML, mais ce n'est pas ce qu'il fait. Elle ne fait qu'une propriété du message qui indique à vos clients de messagerie pour interpréter le corps comme HTML (plus précisément, il définit le Contenu de l'en-tête de Type "texte/html"), mais vous avez fait le fournir en code HTML.output.txt devrait ressembler à ceci:
Le script PowerShell devrait ressembler à ceci:
Si vous ne pouvez pas fournir output.txt en HTML car elle est générée automatiquement en texte brut, puis le script sera nécessaire de les convertir. Si le format est toujours comme indiqué dans votre exemple, ce n'est pas trop compliqué. Remplacer le
$message.Body =
ligne avec ceci:text/html
, qui indique aux clients d'interpréter le corps comme HTML. Les résultats affichés dans votre mise à jour sont exactement ce que j'ai décrit que vous obtenez par le rendu de output.txt en HTML--pas de sauts de ligne et les espaces réduit à un espace unique. Si vous ne pouvez pas modifier le script qui génère output.txt, vous aurez à faire le script PowerShell convertir au format HTML.