Powershell - использование файла .htm в качестве тела письма - PullRequest
1 голос
/ 02 февраля 2012

Я пытаюсь написать сценарий powershell, который будет запущен запланированной задачей, сценарий вернет детали наших резервных копий базы данных, сохранит их в файл .htm и также отправит результаты по электронной почте.Пока что получение информации о резервном копировании и сохранение в файл .htm работает нормально, но я не могу понять, как сделать тело письма похожим на файл .htm.Тело электронной почты на данный момент выглядит как необработанный HTML-код.

Пока:

$a = "<style>"
$a = $a + "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}"
$a = $a + "TH{border-width: 1px;padding: 10px;border-style: solid;border-color: black;}"
$a = $a + "TD{border-width: 1px;padding: 10px;border-style: solid;border-color: black;}"
$a = $a + "</style>"

$date = ( get-date ).ToString('yyyyMMdd')





[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | out-null
$s = New-Object ('Microsoft.SqlServer.Management.Smo.Server') "LOCALHOST\SQLX64"

$dbs=$s.Databases

#Retrieves the last backup dates - both for FULL and LOG backups

$backups = $dbs | SELECT Name,LastBackupDate, LastLogBackupDate | ConvertTo-HTML -head $a -body "<H2>Database Backup Details $date </H2>" | Out-File $("D:\SQL Backup Log Script\Logs\"+ $date +"_DB01 Backup Log.htm")


$EmailFrom = "IT@##.net"
$emailto = "##@##.net"
$Subject = "DB01 SQL Backup Log" 
$Body = Get-Content ("D:\SQL Backup Log Script\Logs\"+ $date +"_Backup Log.htm")
$SMTPServer = "smtp.gmail.com" 
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
$SMTPClient.EnableSsl = $true 
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("##", "##"); 
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)

Спасибо, Шарлотта.

Ответы [ 3 ]

3 голосов
/ 02 февраля 2012

Попробуйте вместо этого использовать командлет Send-MailMessage , который позволяет указать параметр -BodyAsHtml:

Send-MailMessage `
    -From $EmailFrom -To $EmailTo `
    -Subject $Subject -Body $Body -BodyAsHtml $true `
    -Credential $Credentials

В качестве альтернативы вам придется использовать SmtpClient.Вместо этого отправьте (MailMessage) метод и создайте MailMessage объект, в котором можно установить свойство MailMessage.IsBodyHtml :

var client = New-Object System.Net.Mail.SmtpClient
# ...
var message = New-Object System.Net.Mail.MailMessage
message.IsBodyHtml = $true
# ...
$client.Send($message)
3 голосов
/ 02 февраля 2012

собрал все ответы одним куском:

$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
$SMTPClient.EnableSsl = $true 
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("##", "##"); 
$message = New-Object Net.Mail.MailMessage($EmailFrom, $EmailTo, $Subject, $Body)
$message.IsBodyHtml = $true;
$SMTPClient.Send($message)
2 голосов
/ 02 февраля 2012

Попробуйте добавить эту строку перед методом send ():

$SMTPClient.isbodyhtml= $true

РЕДАКТИРОВАТЬ после комментария:

Вы должны использовать этот объект:

$ SMTPClient = New-Объект System.Net.Mail.MailMessage

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...