如果某些用户自动使用Outlook客户端来查看共享收件箱中的回退/ReportItems,而不是像文档所示返回消息的明文,那么就会有一个unicode字符串被解析为UTF-8字符串,因此它看起来像中文。
我可以通过一些代码来克服这一点,但另一个问题是,对于所有访问该收件箱的用户来说,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最后一行是在VBA中获取乱码文本的地方,它试图将其解析为ASCII,并返回一个大块"?“。在.Net中,它返回解析为UTF-8的值,我们得到显示为中文的字符。在任何一种情况下,收件箱中的报表项将开始显示为中文字符,并将继续用于该收件箱的所有用户。
发布于 2015-04-14 04:41:07
我刚刚在Outlook中的VBA功能中出现了这种情况,它处理电子邮件,为订单反弹,并将这些订单标记为需要注意。outlook中的原始电子邮件看上去很好,但当我试图处理它时,这些字符更改为中文,Report.Body只显示问号。
我发现使用StrConv转换为Unicode可以获得正确的正文内容以供处理。
Dim strBody as String
strBody = StrConv(Report.Body, vbUnicode)发布于 2015-03-14 18:07:09
您确定Inbox.Items(计数器)调用返回ReportItem类的实例吗?您有机会检查MessageClass属性吗?
您很可能尝试将MailItem类的实例强制转换为ReportItem类。是这样吗?
此外,我建议在运行时使用任何低级属性查看器(如MFCMAPI或OutlookSpy )来观察属性。你看到“中国”字了吗?
发布于 2020-09-02 21:49:43
我偶然发现了这个问题,我编写了一个函数来解决这个问题。我想我应该在这里分享一下,以防对其他人有用。
Private Sub Example()
Dim Item As Object
Set Item = Application.ActiveExplorer.Selection(1)
Debug.Print ItemBody(Item)
End Sub
Public Function ItemBody(Item As Variant) As String
On Error Resume Next
If TypeName(Item) = "ReportItem" Then
With Item.GetInspector
ItemBody = .WordEditor.Content
.Close 1
End With
Else
ItemBody = Item.Body
End If
End Functionhttps://stackoverflow.com/questions/29040321
复制相似问题