【问题标题】:Weird characters in email body电子邮件正文中的奇怪字符
【发布时间】:2019-07-28 14:56:58
【问题描述】:

我对 VBScript 有一点问题。它应该如何工作。这是一个简单的代码,应该遍历特定文件夹中的所有电子邮件,获取特定的电子邮件正文并尝试查找正则表达式。它在我的计算机上正常工作,但不知何故,相同的代码在其他笔记本电脑(我朋友的笔记本电脑)上不起作用。大多数(不是全部)电子邮件正文看起来很奇怪,如下面的附加屏幕所示:

我想补充一点,我们有相同的电子邮件要测试。还有什么奇怪的是,使用脚本后,它会将第一封电子邮件转换成这些奇怪的字符。 这就是代码的样子:

Set objOutlook = CreateObject("Outlook.Application")
Set objNamespace = objOutlook.GetNamespace("MAPI")
Set objMailbox = objNamespace.Folders(Main_mailbox)
Set objMainMailbox = objMailbox.Folders(Main_folder)
Set objFolder = objMainMailbox.Folders(Sub_folder)
Set re = New RegExp
re.IgnoreCase = True
re.Global = True
re.Pattern = "<.+>"

Set colItems = objFolder.Items

NumberOfEmails = colItems.Count
WScript.Echo NumberOfEmails & " emails found"
For i = NumberOfEmails To 1 Step - 1
    BodyMsg = colItems(i).Body
    Lines = Split(BodyMsg, vbCrlf)
    For j = 1 To UBound(Lines)
        If InStr(1, Lines(j), "Reply-To:") Then
            Set RegMatches = re.Execute(Lines(j))
            For Each myMatch In RegMatches
                OutputMatch = OutputMatch & " " & myMatch & ";"
                OutputMatch = Replace(OutputMatch, "<", "", 1, 1)
                OutputMatch = Replace(OutputMatch, ">", "", 1, 1)
                EmailCount = EmailCount + 1
            Next
        End If
    Next
Next

我想知道它是否与编码或类似的东西有关,如果该问题是由系统设置引起的?

如果您需要更多我忘记提及的信息,请告诉我。

【问题讨论】:

  • 看起来您朋友笔记本电脑上的默认语言可能是某种形式的中文(不知道各种类型的中文字符集之间的区别),无论是在 Outlook 本身中还是作为桌面的默认语言。
  • 截图中的输出看起来像mojibake,例如将 ASCII 文本处理为 UTF-16 文本时(读取 2 个字节作为 1 个字符而不是 1 个字节作为 1 个字符)。
  • 整天编码不匹配。
  • 尝试检查InternetCodepage property 以识别用于消息的字符编码。您最终应该遇到的常见的是 65001 (UTF-8)1252 (Windows-1252)
  • 还会检查BodyFormat property 是否合适,将是OlBodyFormat enumerations 之一。您知道您是否应该查看BodyHTMLBodyRTFBody

标签: vba vbscript outlook character-encoding


【解决方案1】:

听起来您确实遇到了 NDR(未送达报告 - 由 ReportItem 对象表示) - 通过 Outlook 对象模型访问时,ReportItem.Body 返回乱码。这已经是一些 Outlook 版本的问题了。

您可以通过检查您是否仅获得 MailItem 对象(类属性必须为 43 (olMail))来跳过此类项目,或者使用 Redemption - 它的 RDOReportItem 对象不存在此问题。

【讨论】:

    猜你喜欢
    • 2011-12-26
    • 2011-02-27
    • 2018-03-03
    • 2010-09-24
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    • 2022-12-22
    • 1970-01-01
    相关资源
    最近更新 更多