Powershell电子邮件附件字符集
我正在处理这个问题。 我有csv文件,这是由PowerShell脚本parsing。 Powershell使用附件创build邮件并使用smtp服务器发送邮件。
问题是,当用户收到电子邮件,打开它,并想打开附件。 它是* .csv附件,并由Excel打开(尝试不同的版本)。 它显示损坏的字符集(字符像ěéáý)。 如果我在Notepad ++中打开文件,我可以看到格式设置为UTF8,没有BOM。 如果我将它转换为带有BOM的UTF8,excel可以打开它没有任何问题。
我的问题是,我不知道在哪里,如果有可能强制创build与物料清单的附件。
string数据从csv文件中读取,如下所示:
$reader = [System.IO.File]::OpenText($inputFile) $data = $reader.ReadLine() $stringData = {parse, copy, clear $data}
附件是这样创build的:
$Utf8WithBom = New-Object System.Text.UTF8Encoding($True) [Byte[]]$contentAsBytes = $Utf8WithBom.GetBytes("$stringData") $memoryStream.Write($contentAsBytes, 0, $contentAsBytes.Length) $contentType = New-Object Net.Mime.ContentType -Property @{ MediaType = "application/vnd.ms-excel" CharSet = "UTF-8" Name = $AttachmentName } $attachment = New-Object System.Net.Mail.Attachment $attPath, $contentType $attEmail.Attachments.Add($attachment)
如果附件文件没有BOM,甚至使用UTF8Encoding,BOM也不会被写入。 您必须首先将没有BOM的文件更改为BOM,然后执行附件。
将编码从无BOM转换为使用附件文件的BOM
(Get-Content -path "c:\temp\test.txt" -Encoding UTF8) | Set-Content -Encoding UTF8 -Path "c:\temp\test.txt"