Powershell HTML форматирование электронной почты - PullRequest
1 голос
/ 08 февраля 2012

Сценарий ниже помещает данные резервной копии базы данных в красиво отформатированную таблицу с границами и сохраняет ее в формате .htm.Затем он отправляет отчет по электронной почте, но когда отчет отправляется по электронной почте, «таблица» не имеет границ и не имеет пробела между столбцом «LastBackupDate» и столбцом «LastLogBackupDate» - в основном это выглядит так же, как и результаты на консоли PowerShell.Может кто-нибудь сказать мне, как отформатировать электронную почту, чтобы все HTML использовался из файла?PS Я не могу использовать send-mailmessage из-за проблем с gmail ssl.Спасибо.

#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>"

#Set Date
$date = ( get-date ).ToString('yyyyMMdd')

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

#Retrieves the last backup dates - for full and log backups
$dbs=$s.Databases
$backups = $dbs | SELECT Name,LastBackupDate, LastLogBackupDate | Sort-Object LastBackupDate | ConvertTo-HTML -head $a -body "<H2>DB01 Database Backup Details $date </H2>" | Out-File $("D:\SQL_Backup_Log_Script\Logs\Backup_Log_Temp.htm")

#Email Report
$EmailFrom = "someone@domain.com"
$emailto = "me@gmail.com"
$Subject = "Database Backup Log $date" 
$Body = Get-Content D:\SQL_Backup_Log_Script\Logs\Backup_Log_Temp.htm
$SMTPServer = "smtp.gmail.com" 
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
$SMTPClient.EnableSsl = $true 
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("someone@domain.com", "password here"); 
$message = New-Object Net.Mail.MailMessage($EmailFrom, $EmailTo, $Subject, $Body)
$message.IsBodyHtml = $true;
$SMTPClient.Send($message)

#Rename file to include today's date
Rename-Item -path D:\SQL_Backup_Log_Script\Logs\Backup_Log_Temp.htm -newname ($date +"_DB01_Backup_Log.htm")

1 Ответ

1 голос
/ 08 февраля 2012

Попробуйте изменить эту строку (не можете проверить, в этом ли проблема):

$Body = [System.IO.File]::ReadAllText("D:\SQL_Backup_Log_Script\Logs\Backup_Log_Temp.htm")

свойство body в Net.Mail.MailMessage accept [string], возвращение get-content [string[]].

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