电子邮件主题显示编码

时间:2011-09-20 09:20:19

标签: powershell

我正在使用发送邮件信息向我们的支持系统发送电子邮件。 但是当它发送电子邮件时,它会显示主题行,就像这个屏幕一样!

  

=?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

有任何线索吗?

3 个答案:

答案 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中看起来很好,所以我认为主题是正确的。我不是电子邮件格式或文本编码的专家,因此我不会推测原因。