2

我在 Windows 10 下使用 Outlook 作为我的电子邮件客户端,并尝试使用 RDCOMClient 库来处理一些电子邮件。有些电子邮件是俄语的,我无法以可用的格式输出俄语部分。现在,我只关注主题行。当我提取该行并将其打印出来时,除了主题中的几个拉丁字符外,我只得到问号。我尝试设置编码并使用 iconv,但没有成功。但 iconv 确实提供了一个有用的线索。根据我下面显示原始字符的可重现示例给出:

iconv(SUBJECT, toRaw=T)
 [1] 53 74 61 63 6b 4f 76 65 72 66 6c 6f 77 54 65 73 74 4d 65 73 73 61 67 65 3a
[26] 20 3f 3f 3f 3f 3f 3f 3f 3f 20 3f 3f 3f 3f 3f 3f 3f 3f 3f

最后所有的3f?那是问号的代码。RDCOMClient 实际上是返回 ??? 从 Outlook。这不是 R 内部的一些编码问题。

我查看了许多关于 SO 的 RDCOMClient 帖子,但没有看到任何处理此问题的内容。

RDCOMClient<->Outlook 连接是否刚刚断开?或者有什么办法可以解决这个问题?

尝试可重现的示例

由于我们正在讨论访问电子邮件,我不知道如何制作一个非常简单的可重现示例,但这里有一种可重现的方法来测试它。当然,您必须在 Windows 上安装 Outlook 才能做到这一点。

  1. 给自己发一封主题为:StackOverflowTestMessage: Тестовое сообщение

  2. R 代码 我们需要先找到邮箱。大多数代码都是这样做的。然后我们检查主题。


## Connect to Outlook
OutApp <- COMCreate("Outlook.Application")
outlookNameSpace = OutApp$GetNameSpace("MAPI")

## Find the Inbox
INBOX = outlookNameSpace$GetDefaultFolder(6)
INBOX$Name()            ## Confirm
emails <- INBOX$Items

## Find the relevant email
NumEmail = emails()$Count()
MessageNumber = 0
for(i in NumEmail:1) {
    SUBJ = emails(i)$Subject()
    if(grepl("StackOverflowTestMessage", SUBJ)) {
        MessageNumber = i
        break()
    }
}

## Now try to get the subject line
SUBJECT = emails(MessageNumber)$Subject()
Encoding(SUBJECT) = 'UTF-8'
SUBJECT
[1] "StackOverflowTestMessage: ???????? ?????????"
iconv(SUBJECT, toRaw=T)
[[1]]
 [1] 53 74 61 63 6b 4f 76 65 72 66 6c 6f 77 54 65 73 74 4d 65 73 73 61 67 65 3a
[26] 20 3f 3f 3f 3f 3f 3f 3f 3f 20 3f 3f 3f 3f 3f 3f 3f 3f 3f```

4

0 回答 0