首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Outlook Interop在C#中保存.msg :正确显示特殊字符(UTF-8)

用Outlook Interop在C#中保存.msg :正确显示特殊字符(UTF-8)
EN

Stack Overflow用户
提问于 2021-02-18 15:01:52
回答 1查看 47关注 0票数 0

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

windows资源管理器中的文件如下所示:

body只是忽略了特殊的char:

在读/写.csv文件时,我使用的是流写入器/流读取器,可以设置Encoding.UTF8,也可以很好地工作。这个控制台应用程序还可以从从.csv文件读取的数据生成.xlsx文件,这也可以很好地工作。

我的代码:

代码语言:javascript
复制
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");

任何帮助都是非常感谢的。谢谢!

编辑:如果我将像"ö“这样的特殊字符硬编码到源代码中,它将在文件名和邮件正文中正确显示。这对我的问题有帮助吗?如果是这样的话,谁能给我指出正确的方向?

EN

回答 1

Stack Overflow用户

发布于 2021-02-18 16:55:06

根据经验,只有当某个字段中存在特殊字符时,MailItem才会保存在UTF8格式中,如果不存在,则mailItem会保存在US-ASCII码中。

我们使用了一种解决方法,在主题的末尾添加了一个不可见的特殊字符(alt + 0160 |0)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66255110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档