0

我有一些电子邮件保存在我的 Outlook 目录之外,例如。在某个文件路径"C:\\Users\\foo\\bar.msg"

我想使用library(RDCOMClient);将这些电子邮件读入 R 在这个问题之后,我已经能够从我的 Outlook 文件夹结构中将电子邮件读入 R。但是,考虑到电子邮件的数量,无法将它们导入 Outlook 以从那里阅读。

这个问题的答案表明,在 VBA 中,您可以使用OpenSharedItem从外部文件夹读取电子邮件,但是我无法将其翻译成在 R 中有效的东西。我的尝试是:

library(RDCOMClient)

OutApp <- COMCreate("Outlook.Application")
outlookNameSpace <- OutApp$GetNameSpace("MAPI")

message_path <- "C:\\Users\\foo\\bar.msg"
message <- OutApp$OpenSharedItem("message_path")
4

3 回答 3

1

原来在我上面的例子中有一个错误的对象引用:当调用 CreateItemFromTemplate 时,我引用OutApp而不是outlookNamespace

维护问题,因为这可能会节省其他人的搜索并将 VBA 解决方案插入 R。

工作解决方案:

library(RDCOMClient)

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

message_path <- "C:\\Users\\foo\\bar.msg"      
message <- outlookNameSpace$OpenSharedItem(message_path)
于 2020-02-22T17:55:33.733 回答
1

我们还可以使用以下方法提取附件:

 library(RDCOMClient)
 destination_dir <- "C:\\Users"
 path_msg <- "C:\\Users\\foo\\bar.msg"
 OutApp <- COMCreate("Outlook.Application")
 outlookNameSpace <- OutApp$GetNameSpace("MAPI")
 message <- outlookNameSpace$OpenSharedItem(path_msg)
 nb_Attached_Files <- message$Attachments()$Count()
 list_Attached_Files <- list()
 
 for(i in 1 : nb_Attached_Files)
 {
   print(i)  
   attachment_file <- paste0(destination_dir, .Platform$file.sep, message$Attachments(i)$Filename())
   list_Attached_Files[[i]] <- attachment_file
   message$Attachments(i)$SaveAsFile(attachment_file)
}

要提取主题和正文,我们可以使用以下方法:

text_Subject <- message$Subject()
text_Body <- message$Body()
于 2021-01-29T11:39:41.497 回答
1

您可能根本不需要为此使用RDCOMClient。hrbrmstr 在他的 github 上有一个名为msgxtractr的包,其中包含一个函数,该函数read_msg将文件路径作为输入并返回一个包含所有消息详细信息的列表对象。

要从 github 安装包,请使用

# install.packages("remotes")
remotes::install_github("hrbrmstr/msgxtractr")
# Alternate GitLab Repo:
# remotes::install_gitlab("hrbrmstr/msgxtractr")

安装软件包后,您可以使用:

msgxtractr::read_msg("C:\\Users\\foo\\bar.msg")

可能值得对RDCOMClient解决方案进行基准测试msgxtractr。我怀疑这RDCOMClient会慢一些并且可能不太稳定(因为它在应用程序之间进行通信)。

于 2020-02-22T19:11:08.067 回答