Powershell电子邮件附件charset

时间:2015-11-24 09:36:27

标签: excel email csv powershell attachment

我正在处理这个问题。 我有csv文件,由powershell脚本解析。 Powershell创建带附件的电子邮件,并使用smtp服务器发送它。

问题是,当用户收到电子邮件时,打开它并想要打开附件。这是* .csv附件,它由Excel打开(尝试了不同的版本)。它显示了腐败的字符集(像ééáý)。 如果我在Notepad ++中打开文件,我可以看到该格式设置为UTF8而没有BOM。如果我用BOM将其转换为UTF8,excel可以毫无问题地打开它。

我的问题是,我不知道在哪里以及是否可以强制使用BOM创建附件。

从csv文件中读取字符串数据,如下所示:

$reader = [System.IO.File]::OpenText($inputFile)
$data = $reader.ReadLine()
$stringData = {parse, copy, clear $data}

附件是这样创建的:

$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) 

1 个答案:

答案 0 :(得分:0)

如果附件文件没有BOM,甚至使用UTF8Encoding,则不会写入BOM。您必须首先将文件从没有BOM更改为BOM,然后执行附件。

要将编码从无物料清单更改为附件文件物料清单,请使用

(Get-Content -path "c:\temp\test.txt" -Encoding UTF8) | 
      Set-Content -Encoding UTF8 -Path "c:\temp\test.txt"