已发送的电子邮件将unicode字符转换为mojibake

时间:2018-01-25 19:03:57

标签: powershell email unicode mojibake

我有一个邮件脚本向代理发送有关票证的自动消息,但瑞典语扩展字符在脚本中出现乱码。即使我将其发送到控制台而不是通过电子邮件发送,文本也会出现乱码。

我的研究表明PowerShell中的字符串是UTF16,所以我希望保留一些东西......唉,mojibake。

我从Net.Mail.SmtpClient开始,但是没有用。由于-Encoding参数,我切换到Send-MailMessage,但这对我没有任何改变。我已经弄乱了$ OutputEncoding变量,以防万一与某些事情有关,但没有运气。

所以,例如(假设这里也没有被破坏): 瑞典字母表中的扩展字符为ÅÄÖåäö 它们被渲染为ÅÄÖåäö

#$encod = ([System.Text.Encoding]::UTF8);
$encod = ([System.Text.Encoding]::Unicode);
$OutputEncoding = $encod;

[string]$message = 'ÅÄÖåäö';
$emailFrom = "Example <EXAMPLE@SAMPLE.COM>";
$emailTo = "Test <TEST@SAMPLE.COM)";
$subject="Långtidsspara";
$smtpserver="smtp.SAMPLE.COM";

#$smtp=New-Object Net.Mail.SmtpClient($smtpServer);
#$smtp.Send($emailFrom, $emailTo, $subject, $message) ;
Send-MailMessage -Body $message -Encoding $encod -From $emailFrom -SmtpServer $smtpserver -Subject $subject -To $emailTo

编辑添加:以前当我尝试使用Net.Mail.SmtpClient()时,我正在执行以下操作:

$smtp=New-Object Net.Mail.SmtpClient($smtpServer);
$smtp.Send($emailFrom, $emailTo, $subject, $message);

但我找不到调整编码的方法。

编辑2:感谢@RemyLebeau我尝试将消息设置为MailMessage对象并使用SmtpClient发送,但行为没有变化。

$smtp=New-Object Net.Mail.SmtpClient($smtpServer);
$mail=New-Object Net.Mail.MailMessage($emailFrom, $emailTo, $subject, $message);
$mail.BodyEncoding = $encod;
$mail.HeadersEncoding = $encod;
$mail.SubjectEncoding = $encod;
$mail.BodyTransferEncoding = [System.Net.Mime.TransferEncoding]::EightBit;
$smtp.SendMailAsync($mail);

编辑3:从UTF16更改为UTF8后,我的电子邮件标题说明以下

Subject: =?utf-8?B?SW5zcGVsbmluZ3NkYXRhIChMw4PCpW5ndGlkc3NwYXJhKQ==?=
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit

但它仍然是乱码。我在这里有Outlook 365,但是我一直收到来自欧洲的电子邮件,包括之前收到Å名字的客户的电子邮件,Outlook似乎应对了吗?

0 个答案:

没有答案