【问题标题】:Do Redemption API support unicode characters when creating pst from email message files?从电子邮件消息文件创建 pst 时,Redemption API 是否支持 unicode 字符?
【发布时间】:2018-08-28 19:54:07
【问题描述】:

我有一个正文中包含 unicode 字符的电子邮件文件。当我为该消息文件创建 pst 并将其加载到 Outlook 中时,正文完全丢失了。 从电子邮件消息文件创建 pst 时,兑换 api 是否支持 unicode 字符?

更新 1

下面是创建 PST 的代码

        private static void CreatePSTUsingRedemption(XmlNodeList nodelist, string pstPath)
        {            
          RDOSession pstSession = null;
          RDOPstStore store = null;
          RDOFolder folder = null;
          RDOMail rdo_Mail = null;
          RDOItems items = null;
          string processingFileId = string.Empty;
          SafeMailItem sitem = new SafeMailItem();
          try
          {
              pstSession = new RDOSession();
              store = pstSession.LogonPstStore(pstPath, 1, Path.GetFileNameWithoutExtension(pstPath));
              int completedCount = 0;
              folder = store.IPMRootFolder;
              RDOFolder inboxFolder = pstSession.GetDefaultFolder(rdoDefaultFolders.olFolderInbox);
              inboxFolder.Delete();
              RDOFolder sentFolder = pstSession.GetDefaultFolder(rdoDefaultFolders.olFolderSentMail);
              sentFolder.Delete();
              RDOFolder outboxFolder = pstSession.GetDefaultFolder(rdoDefaultFolders.olFolderOutbox);
              outboxFolder.Delete();
              folder = folder.Folders.Add("Messages");
              foreach (XmlNode node in nodelist)
              {
                  processingFileId = node["Id"].InnerText;
                  RemoteSharedInfo rI = XmlUtil.GetObjectFromXmlString<RemoteSharedInfo>(node["RemoteSharedInfo"].OuterXml);
                  using (FileShareImpersonator imp = new FileShareImpersonator(rI))
                  {
                      imp.Start();
                      if (node["OriginalFileExtension"].InnerText.ToLower() == "eml" || node["OriginalFileExtension"].InnerText.ToLower() == "emlx")
                       {
                          items = folder.Items;
                          rdo_Mail = items.Add("IPM.Note");
                          sitem.Item = items.Add(0);
                          sitem.Import(node["FullPath"].InnerText, 0x400);
                          sitem.CopyTo(rdo_Mail);
                          rdo_Mail.Save();
                          store.Save();
                          completedCount++;
                          Console.WriteLine("FILES_PROCESSED:" + completedCount);
                      }
                      else //go to this ELSE block for email message files i.e for msg extension
                      {
                          rdo_Mail = pstSession.GetMessageFromMsgFile(node["FullPath"].InnerText);
                          rdo_Mail.CopyTo(folder);
                          rdo_Mail.Save();
                          store.Save();
                          completedCount++;
                          Console.WriteLine("FILES_PROCESSED:" + completedCount);
                      }
                  }
              }
          }
        catch (Exception ex)
        {
            Console.Error.WriteLine("Error:" + ex.Message);
            Environment.ExitCode = 1;
        }
        finally
        {
            Marshal.ReleaseComObject(rdo_Mail);
            Marshal.ReleaseComObject(folder);
            Marshal.ReleaseComObject(store);
            Marshal.ReleaseComObject(sitem);
            if (items != null)
                Marshal.ReleaseComObject(items);
        }
        pstSession.Logoff();
        Marshal.ReleaseComObject(pstSession);
        GC.Collect();
        Environment.ExitCode = 1;
    }

【问题讨论】:

    标签: outlook-redemption


    【解决方案1】:

    是的,兑换完全启用了 Unicode。请确认您正在创建一个 Unicode PST 文件。

    创建 PST 文件的代码是什么? Outlook 的确切版本是什么?

    【讨论】:

    • 您好 Dmitry,我已经通过添加用于创建 PST 的代码更新了我的问题,并且我使用的 Outlook 版本是 2013。
    • 您对 EML 或 MSG 文件有疑问吗?
    • 对于味精文件,你为什么使用 GetMessageFromMsgFile / CopyTo 而不是 Import(..., olMsg)?
    • 是的,问题出在 msg 文件上。我在互联网上的某个地方找到了这段代码。导入功能是否获取消息文件并将其复制到当前文件夹?如果消息包含 Unicode 字符,'type' 的值是什么? eml文件呢?使用兑换的处理方式正确吗?
    • 导入函数导入给定消息,而不是直接导入文件夹。 Import (..., olMsg) 可以处理 ANSI 和 Unicode MSG 文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 2016-01-08
    • 1970-01-01
    • 2021-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多