【发布时间】:2021-02-18 07:01:52
【问题描述】:
我的 C# 控制台应用程序正在从 .csv 文件中读取收件人,该文件以 UTF-8 字符集保存并包含特殊字符(中文字母、ö、ä 等)。现在通过创建 MailItem 并在设置 MailItemObject.To 和 MailItemObject.Body 并使用 MailItemObject.SaveAs 后生成 .msg 文件工作正常,但无法正确显示特殊字符。
而正文只是忽略了特殊字符:
读取/写入 .csv 文件时,我使用的是 Streamwriter/Streamreader,并且可以设置 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");
非常感谢任何帮助。谢谢!
编辑:如果我将像“ö”这样的特殊字符硬编码到源代码中,它会在文件名和邮件正文中正确显示。这对我的问题有帮助吗?如果是这样,有人能指出我正确的方向吗?
【问题讨论】:
-
这不是你的问题,我只是想让你知道 String.Join。它使用
oMsg.To = String.Join(';', recipients)+"; ";这样的分隔符将多个字符串合并为一个。 -
^^ 还有Path.Combine ...
-
docs.microsoft.com/en-us/dotnet/api/… 可以将
type参数作为 olMSGUnicode 。你试过吗? -
我尝试设置 oMsg.SaveAs(path + recipientnames[0] + ".msg", Outlook.OlSaveAsType.olMSGUnicode);但遗憾的是它没有用。
标签: c# utf-8 outlook interop special-characters