Redemption API从邮件文件创建PST时是否支持Unicode字符?
我有一个正文包含Unicode字符的邮件文件,使用Redemption API创建PST并在Outlook中加载后,正文内容完全丢失。请问Redemption API从邮件文件创建PST时是否支持Unicode字符?
更新1:以下是创建PST的代码片段:
private static void CreatePSTUsingRedemption(XmlNodeList nodelist, string pstPath) { RDOSession pstSession = null; RDOPstStore store = null; RDOFolder folder = null; RDOMail rdo_Mail = null; RDOItem...
Redemption API完全支持Unicode字符,所以你遇到的正文丢失问题肯定是代码实现里的细节没处理到位,下面给你几个常见的排查和修复方向:
确保创建的是Unicode格式PST:虽然Redemption默认会创建Unicode PST,但最好显式指定格式,避免不小心生成ANSI格式(ANSI PST不支持Unicode,会直接丢失对应内容)。调用
LogonPstStore时,最后一个参数传入2(对应rdoPSTUnicode枚举值)即可:store = pstSession.LogonPstStore(pstPath, 1, "My Unicode PST", 2);检查正文内容的读取与赋值:如果是从XML节点读取Unicode内容,要保证读取时用的是支持Unicode的编码(比如UTF-8),别用ASCII编码导致字符丢失。给
RDOMail赋值时,纯文本内容用Body属性,HTML内容用HTMLBody属性,别搞混——要是把HTML内容塞到Body里,大概率会显示异常甚至空白。正确释放对象与保存PST:操作完成后,一定要正常注销PST会话并释放COM对象,避免PST文件未完全写入就被关闭。可以在代码末尾加上这些操作:
// 先注销会话 pstSession.Logoff(); // 逐一释放COM对象 Marshal.ReleaseComObject(rdo_Mail); Marshal.ReleaseComObject(folder); Marshal.ReleaseComObject(store); Marshal.ReleaseComObject(pstSession);简化测试定位问题:你可以先写一段极简代码——直接创建一个带Unicode正文的测试邮件,写入PST后再打开看看。如果这个测试没问题,那就是你处理XML节点或原邮件内容的环节出了问题;如果测试也丢内容,再检查PST创建的参数是否正确。
内容的提问来源于stack exchange,提问作者Mohit Maharjan

