Отправка - замена HTML электронной почты

Я пытаюсь использовать объект MailMessage для отправки электронной почты с помощью PowerShell. Сценарий использует Import-CSV для использования файла, а затем использует ConvertTo-HTML в теле письма. Я добавил немного замененного HTML, так как почтовый клиент, которому я отправляю сообщения, игнорирует теги <style>.

Вот мой сценарий:

$smtpServer = "x.x.x.x"
$smtpFrom = "[email protected]"
$smtpTo = "[email protected]"
$messageSubject = "Weekly Student Device Repair Summary $((Get-Date).ToShortDateString())"

$message = New-Object System.Net.Mail.MailMessage $smtpfrom, $smtpto
$message.Subject = $messageSubject
$message.IsBodyHTML = $true

$summ = Import-Csv -Path 'C:\folder\file.csv'

$message.body = @"
<html>
    <body>
    Hello,<br><br>
    Here is your weekly repair summary.<br><br>
        $($summ | ConvertTo-Html)<br><br>
    Thank you,<br><br>
    Technology
    </body>
<html>
"@

$finalHTML = $message.body -replace "<table", "<table border='0' cellspacing='0' cellpadding='10' style='border: 1px solid black; border-collapse: collapse;'"
$finalHTML = $finalHTML -replace "<th", "<th border='0' cellspacing='0' cellpadding='0' style='border: 1px solid black; border-collapse: collapse; padding:5px;'"
$finalHTML = $finalHTML -replace "<td", "<td border='0' cellspacing='0' cellpadding='0' style='border: 1px solid black; border-collapse: collapse; padding:5px;'"

$finalHTML | Out-File "c:\folder\file.html"

$smtp = New-Object Net.Mail.SmtpClient($smtpServer)
$smtp.Send($finalHTML)

Я сбит с толку, потому что | Out-File работает и выглядит именно так, как я хочу, чтобы тело письма выглядело.

Ошибка $smtp.Send($finalHTML), однако, с:

«Не удается найти перегрузку для «Отправить» и количество аргументов:« 1 »».

Если я заменю $smpt.Send($finalHTML) на $smpt.Send($message), скрипт запустится, электронное письмо будет отправлено, это будет HTML, но ни один из $finalHTML не будет применен.


person CreedC    schedule 08.09.2016    source источник


Ответы (1)


Это потому, что метод Send принимает объект System.Net.Mail.MailMessage в качестве параметра, поэтому вы, вероятно, захотите присвоить $finalHTML $message.body и передать сообщение:

# ....
$message.body = $finalHTML
$smtp = New-Object Net.Mail.SmtpClient($smtpServer)
$smtp.Send($message)
person Martin Brandl    schedule 08.09.2016
comment
Это сделало это. Спасибо большое. Я был на правильном пути со своей стрельбой, но ты попал в цель. Еще раз спасибо. - person CreedC; 08.09.2016