我的C#控制台应用程序正在从一个.csv文件中读取收件人,该文件以UTF-8字符集保存,包含特殊字符(中文字母、ö、ä等)。现在,在设置MailItemObject.To和MailItemObject.Body并使用MailItemObject.SaveAs之后,通过创建MailItem来生成.msg文件可以正常工作,但不能正确显示特殊字符。
windows资源管理器中的文件如下所示:

body只是忽略了特殊的char:

在读/写.csv文件时,我使用的是流写入器/流读取器,可以设置Encoding.UTF8,也可以很好地工作。这个控制台应用程序还可以从从.csv文件读取的数据生成.xlsx文件,这也可以很好地工作。
我的代码:
Outlook.MailItem oMsg = (Outlook.MailItem)oOL.CreateItem(Outlook.OlItemType.olMailItem);
oMsg.Subject = "Test";
string recipient = "";
foreach (string s in recipients)
{
recipient += s;
recipient += "; ";
}
oMsg.To = recipient;
string cc = "";
foreach (string s in incopy)
{
cc += s;
cc += "; ";
}
oMsg.CC = cc;
foreach (string s in stringcountries)
{
for (int i = 0; i < Directory.GetFiles(Directory.GetCurrentDirectory() + "\\outputfiles\\excel", "*" + s + "*").Length; i++)
{
oMsg.Attachments.Add(Directory.GetFiles(Directory.GetCurrentDirectory() + "\\outputfiles\\excel", "*" + s + "*")[i]);
}
}
string body = "";
oMsg.Body = body;
oMsg.SaveAs(path + recipientnames[0] + ".msg");任何帮助都是非常感谢的。谢谢!
编辑:如果我将像"ö“这样的特殊字符硬编码到源代码中,它将在文件名和邮件正文中正确显示。这对我的问题有帮助吗?如果是这样的话,谁能给我指出正确的方向?
发布于 2021-02-18 16:55:06
根据经验,只有当某个字段中存在特殊字符时,MailItem才会保存在UTF8格式中,如果不存在,则mailItem会保存在US-ASCII码中。
我们使用了一种解决方法,在主题的末尾添加了一个不可见的特殊字符(alt + 0160 |0)
https://stackoverflow.com/questions/66255110
复制相似问题