我正在使用发送邮件信息向我们的支持系统发送电子邮件。 但是当它发送电子邮件时,它会显示主题行,就像这个屏幕一样!
=?us-ascii?Q?R899076:Aman:系统摘要?=
在主题中我使用变量:
$vUserName = (Get-Item env:\username).Value
$vComputerName = (Get-Item env:\Computername).Value
$subject = "$vComputerName : $vUserName : System Summary"
然后
send-MailMessage -SmtpServer Smtp-local -To $to -From $from -Subject $subject -Body $body -BodyAsHtml -Priority High
但是当我在Outlook中收到这封电子邮件时,任何想法看起来都很好吗?
实际上,这已经在服务器中指定了大约150行脚本和电子邮件和smtp服务器的主体。
是的我尝试了$subject = "$env:ComputerName : $env:UserName : System Summary"
变量,结果是一样的。
是的,我已经尝试了 - encoding选项并且它给出了错误
Send-MailMessage:无法绑定参数'Encoding'。无法转换“Syste”类型的“utf8”值 m.String“键入”System.Text.Encoding“。 在D:\ PowerShell \ MyScripts \ SystemInfo \ SysInfo-V6-test [notfinal] .ps1:151 char:84 + send-MailMessage -SmtpServer $ smtp -To $ to -From $ from -Subject $ subject -Encoding<<<< utf8 -B ody $ body -Attachments“$ filepath \ $ name.html”-BodyAsHtml -Priority High + CategoryInfo:InvalidArgument:(:) [Send-MailMessage],ParameterBindingException + FullyQualifiedErrorId:CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.SendMai lMessage
有任何线索吗?
答案 0 :(得分:1)
发送电子邮件后,Send-MailMessage cmdlet没有任何输出,我想知道输出来自哪里?你能包括你使用的命令和输出吗?
关于您的主题行,您只能将其缩小到一行:
$subject = "$env:ComputerName : $env:UserName : System Summary"
Send-MailMessage有一个Encoding参数,你试过吗?
答案 1 :(得分:1)
您可以使用.net编写自定义函数,而不是使用Send-MailMessage cmdlet。它很笨拙,但可以解决问题。
这样的事情:
Function SendEmail ($emailFrom, $emailTo, $subject, $body, $attachment) {
# Create from/to addresses
$from = New-Object System.Net.Mail.MailAddress $emailFrom
$to = New-Object System.Net.Mail.MailAddress $emailTo
# Create Message
$message = new-object System.Net.Mail.MailMessage $from, $to
$message.Subject = $subject
$message.Body = $body
$attachment = new-object System.Net.Mail.Attachment($attachment)
$message.Attachments.Add($attachment)
# Set SMTP Server and create SMTP Client
$server = <your server>
$client = new-object system.net.mail.smtpclient $server
# Send the message
"Sending an e-mail message to {0} by using SMTP host {1} port {2}." -f $to.ToString(), $client.Host, $client.Port
try {
$client.Send($message)
"Message to: {1}, from: {0} has beens successfully sent" -f $from, $to
}
catch {
"Exception caught in CreateTestMessage: {0}" -f $Error.ToString()
}
}
(感谢Thomas Lee(tfl@psp.co.uk) - 我在http://powershell.com/cs/media/p/357.aspx)的代码中对此进行了调整
答案 2 :(得分:0)
当我在主题中有空格时使用带有默认编码(ASCII)的Send-MailMessage时,发生了这种情况。
首先,回答有关Encoding参数的问题:当你应该使用这种类型的语法时,你试图将它作为字符串传递(即“-Encoding ASCII”):“ - Encoding([System。 Text.Encoding] :: ASCII)”。
这个“主题中的编码”问题发生在我身上,我将其缩小到主题中的空格。为了证明:
这不包含主题中的编码:
Send-MailMessage -To "alice@example.com" -From "bob@example.com" -Smtp "localhost" -Subject "one" -BodyAsHtml "body1" -Encoding ([System.Text.Encoding]::ASCII)
但这会:
Send-MailMessage -To "alice@example.com" -From "bob@example.com" -Smtp "localhost" -Subject "one two" -BodyAsHtml "body1" -Encoding ([System.Text.Encoding]::ASCII)
请注意,唯一的重要区别是主题中的空间。
如果我指定UTF8作为编码,则主题中没有编码:
Send-MailMessage -To "alice@example.com" -From "bob@example.com" -Smtp "localhost" -Subject "one" -BodyAsHtml "body1" -Encoding ([System.Text.Encoding]::UTF8)
但正如你所说,它在Outlook中看起来很好,所以我认为主题是正确的。我不是电子邮件格式或文本编码的专家,因此我不会推测原因。