powershell:使用get-content作为smtp邮件的主体

时间:2011-09-23 05:36:59

标签: powershell smtp

我使用PowerShell发送SMTP邮件。电子邮件的正文来自文件。 问题是,当我收到这封电子邮件时,它会删除所有空格和换行符,因此看起来很难看。

Outlook客户端无法删除换行符。

我的代码如下:

$smtpserver = "smtpserver"
$from="email1@domain.com"
$to="email2@domain.com"
$subject="something"
$body= (Get-Content $OutputFile )
$mailer = new-object Net.Mail.SMTPclient($smtpserver)
$msg = new-object Net.Mail.MailMessage($from,$to,$subject,$body)
$msg.IsBodyHTML = $true
$mailer.send($msg)

我甚至试图使用带有-encoding ASCII的get-content和其他几个但没有帮助。 有人可以帮忙吗?

-

感谢

4 个答案:

答案 0 :(得分:10)

找到答案:

在读取文件时使用out-string。即。

$body= (Get-Content $OutputFile | out-string )

答案 1 :(得分:3)

在一行的每一端添加HTML换行符:

$body= (Get-Content $OutputFile) -join '<BR>'

答案 2 :(得分:1)

对我来说有用的是将内容转换为HTML,如下所示:

$html = $result | ConvertTo-Html | Out-String
Send-MailMessage -Credential $mycreds -From "" -To "" -BodyAsHtml $html -Encoding ASCII -Subject "Test" -SmtpServer '' -Port 25

答案 3 :(得分:0)

如果您使用的是PowerShell v2.0,请尝试Send-MailMessage:http://technet.microsoft.com/en-us/library/dd347693.aspx

此处的默认编码为ASCII。因此,为了能够保留编码,您可能希望尝试找到文件的编码,然后设置相关的编码。

要查找文件的编码,请在此处使用脚本。 http://poshcode.org/2059

现在,将上述功能与Send-MailMessage结合使用。例如,

send-mailmessage -from "User01 <user01@example.com>" -to "User02 <user02@example.com>", "User03 <user03@example.com>" -subject "Sending the Attachment" -body (Get-Content C:\somefile.txt) -dno onSuccess, onFailure -smtpServer smtp.fabrikam.com -encoding (Get-FileEncoding C:\somefile.txt)

请记住,Get-FileCoding不是内置cmdlet。你需要从poshcode链接复制它。