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

Mat*_*ttB 6 vb.net outlook encoding vba exchange-server

我们最近有一个奇怪的问题,即影响一些用户的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
Run Code Online (Sandbox Code Playgroud)

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

有任何想法吗?

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

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

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

小智 8

我刚刚在Outlook中的VBA功能中发生这种情况,处理电子邮件退回订单并将这些订单标记为需要注意.outlook中的原始电子邮件看起来不错,但是当我尝试处理它时,字符会变为中文,而Report.Body只会显示问号.

我发现使用StrConv转换为Unicode可以获得正确的正文内容进行处理.

Dim strBody as String
strBody = StrConv(Report.Body, vbUnicode)
Run Code Online (Sandbox Code Playgroud)

  • 这几乎也是我发现的,unicode出于某种原因显示为UTF8.我的问题仍然存在.我们可以以编程方式访问消息,但我们仍然需要能够以人类可读的方式在收件箱中显示消息,因此我正在拍摄的内容不会导致问题开始. (2认同)