发送 -replace HTML 电子邮件
Sending -replace HTML email
我正在尝试使用 MailMessage 对象通过 PowerShell 发送电子邮件。该脚本使用 Import-CSV
来使用文件,然后在电子邮件正文中使用 ConvertTo-HTML
。我添加了一些替换的 HTML,因为我发送给的电子邮件客户端忽略了 <style>
标签。
这是我的脚本:
$smtpServer = "x.x.x.x"
$smtpFrom = "RepairSummary@email.org"
$smtpTo = "recipient@email.org"
$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)
错误,但是:
"Cannot find an overload for "Send" and the argument count: '1'".
如果我用 $smpt.Send($message)
替换 $smpt.Send($finalHTML)
,脚本运行,电子邮件发送,它是 HTML,但是 $finalHTML
的 none 是应用。
这是因为 Send
方法将 System.Net.Mail.MailMessage
对象作为参数,因此您可能希望将 $finalHTML
分配给 $message.body
并传递消息:
# ....
$message.body = $finalHTML
$smtp = New-Object Net.Mail.SmtpClient($smtpServer)
$smtp.Send($message)
我正在尝试使用 MailMessage 对象通过 PowerShell 发送电子邮件。该脚本使用 Import-CSV
来使用文件,然后在电子邮件正文中使用 ConvertTo-HTML
。我添加了一些替换的 HTML,因为我发送给的电子邮件客户端忽略了 <style>
标签。
这是我的脚本:
$smtpServer = "x.x.x.x"
$smtpFrom = "RepairSummary@email.org"
$smtpTo = "recipient@email.org"
$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)
错误,但是:
"Cannot find an overload for "Send" and the argument count: '1'".
如果我用 $smpt.Send($message)
替换 $smpt.Send($finalHTML)
,脚本运行,电子邮件发送,它是 HTML,但是 $finalHTML
的 none 是应用。
这是因为 Send
方法将 System.Net.Mail.MailMessage
对象作为参数,因此您可能希望将 $finalHTML
分配给 $message.body
并传递消息:
# ....
$message.body = $finalHTML
$smtp = New-Object Net.Mail.SmtpClient($smtpServer)
$smtp.Send($message)