加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

vb.net – Outlook ReportItem.Body为某些用户返回乱码编码

发布时间:2020-12-17 00:33:15 所属栏目:大数据 来源:网络整理
导读:我们最近有一个奇怪的问题,即影响一些用户的Outlook. 如果某些用户自动运行Outlook客户端以查看共享收件箱中的退回/ ReportItems,而不是返回文档所指示的消息的明文,我们会返回一个已被解析为UTF-8字符串的unicode字符串 – 所以它看起来像中国人. 现在我可
我们最近有一个奇怪的问题,即影响一些用户的Outlook.

如果某些用户自动运行Outlook客户端以查看共享收件箱中的退回/ ReportItems,而不是返回文档所指示的消息的明文,我们会返回一个已被解析为UTF-8字符串的unicode字符串 – 所以它看起来像中国人.

现在我可以通过一些代码来解决这个问题,但另外一个问题是,这种变化发生在Outlook以及所有有权访问该收件箱的用户身上.在outlook中查看的消息本身显示为中文字符 – 原始unicode html解析为UTF-8.

看起来这可能是一个已知问题,但我想知道我是否可以在这里得到一些建议.

我们使用常规方法来访问报表项:

For Counter as Integer = Inbox.Items.Count To 1 Step -1
    Dim Report As Outlook.ReportItem = Inbox.Items(Counter)
    Dim Body As String = Report.Body

最后一行是我们获取garbaled文本的地方.在VBA中,它尝试将其解析为ASCII并返回一个大块“?”而在.Net中它返回解析为UTF-8的值,我们得到显示为中文的字符.在任何一种情况下,收件箱中的原始报表项都开始显示为中文字符,并继续为该收件箱的所有用户执行此操作.

有任何想法吗?

更新:我想分享一个更新,因为似乎有些人仍然看到它.

我想快速强调编码问题在这里很好地讨论,并且通过代码访问消息正文可以很容易.但是,编码问题仍然存在于Outlook客户端中,并且从未解决过,这个问题是我一直关注的问题. .Body属性中必定存在一些错误,它会破坏Exchange服务器上原始邮件对象的编码.祝所有需要解决该特定问题的人好运.

再次更新:问题的答案和更详细的说明在下面发布并选择作为答案.

是的,Outlook对象模型中的ReportItem.Body属性存在问题(存在于Outlook 2013 abd 2016中) – 您可以在 OutlookSpy中看到它:选择NDR消息,单击项目按钮,选择Body属性 – 它将是乱码.更糟糕的是,一旦使用OOM触摸报表项,Outlook将在预览窗格中显示相同的垃圾.

报告文本存储在各种MAPI收件人属性中(单击OutlookSpy中的IMessage按钮并转到GetRecipientTable选项卡).问题是ReportItem对象不公开Recipients集合.解决方法是使用扩展MAPI(C或Delphi)或Redemption(任何语言) – 其ReportItem.ReportText属性没有此问题:

set oItem = Application.ActiveExplorer.Selection(1)
set oSession = CreateObject("Redemption.RDOSession")
oSession.MAPIOBJECT = Application.Session.MAPIOBJECT
set rItem = oSession.GetRDOObjectFromOutlookObject(oItem)
MsgBox rItem.ReportText

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读