Назад | Перейти на главную страницу

Как импортировать текстовый файл в PowerShell и отправить его по электронной почте в формате HTML

Я пытаюсь получить список всех учетных записей Exchange, отформатировать их в порядке убывания от самого большого почтового ящика и поместить эти данные в электронное письмо в формате HTML, чтобы отправить его самому себе. Пока я могу получить данные, отправить их в текстовый файл, а также создать электронное письмо и отправить самому себе. Я просто не могу собрать все это вместе. Я пытался использовать ConvertTo-Html, но мне кажется, что он просто возвращает данные по электронной почте, такие как pageFooterEntry и Microsoft.PowerShell.Commands.Internal.Format.AutosizeInfo, а не фактические данные. Я могу заставить его отправить мне правильные данные, если я не скажу его ConvertTo-Html, просто пусть он передает данные в текстовый файл и извлекает из него, но все это работает вместе без форматирования. Мне не нужно сохранять файл, я просто хочу запустить команду, получить данные, поместить их в HTML и отправить себе по почте. Вот что у меня есть сейчас:

#Connects to Database and returns information on all users, organized by Total Item Size, User
$body = Get-MailboxStatistics -database "Mailbox Database 0846468905" | where {$_.ObjectClass -eq “Mailbox”} | Sort-Object TotalItemSize -Descending | ft @{label=”User”;expression={$_.DisplayName}},@{label=”Total Size (MB)”;expression={$_.TotalItemSize.Value.ToMB()}}  -auto | ConvertTo-Html

#Pause for 5 seconds for Exchange 
write-host -foregroundcolor Green "Pausing for 5 seconds for Exchange"
Start-Sleep -s 5


$toemail = "me@example.com" # Emails report to this address.
$fromemail = "me@example.com" #Emails from this address.
$server = "Exchange.company.com" #Exchange server - SMTP.


#Email the report.
$email = New-Object System.Net.Mail.MailMessage
$email.IsBodyHtml = $True
$email.To.Add($toemail)
$email.From = $fromemail
$email.Subject = "Exchange Mailbox Sizes"
$email.Body = $body
$client = New-Object System.Net.Mail.SmtpClient $server
$client.UseDefaultCredentials = $true
$client.Send($email)

Любые мысли были бы полезны, спасибо!

вы можете попробовать мою, которая работает для меня. Вам нужно установить все переменные, которые должны все самодокументировать.

$body = "$(cat $file)"

send-MailMessage -SmtpServer $smtpserver -To $to -From $from -Subject $subject -Body $body -BodyAsHtml -Priority high

Спасибо за вашу помощь выше. То, что вы предложили, отчасти сработало для меня, но у меня были и другие проблемы с форматированием, которые я тоже решил. Чтобы помочь следующему, я также публикую свой конечный результат / конфигурацию. Возможно, это не так эффективно, как могло бы быть, но, похоже, оно работает для того, что я хотел! Еще раз спасибо!

    #Connects to Database and returns information on all users, organized by DisplayName, ItemCount, TotalItemSize
    $body = Get-MailboxStatistics -database "Mailbox Database 0846468905" | where {$_.ObjectClass -eq “Mailbox”} | Sort-Object TotalItemSize -Descending  | ConvertTo-Html -property DisplayName, ItemCount, TotalItemSize

    #Pause for 3 seconds for Exchange to write the file.
    Start-Sleep -s 3

    $toemail = "me@example.com" #Emails report to this address.
    $fromemail = "me@example.com" #Emails report from this address.
    $server = "Exchange.company.com" #Exchange server - SMTP.

    $HTMLmessage = @"
    <font color=""black"" face=""Arial, Verdana"" size=""3"">
    <br>
    <body BGCOLOR=""white"">
    $body
    </body>
    "@ 

    #Email the report.
    Send-MailMessage -smtpServer $server -to $toemail -from $fromemail -subject "Exchange Mailbox Sizes" -body $HTMLmessage -BodyAsHtml -priority High