使用R从Outlook电子邮件下载附件

时间:2017-08-08 20:43:05

标签: r rdcomclient

我每个星期天都收到一封电子邮件附件(一个压缩文件夹)。电子邮件的主题永远不会改变。我想找到包含指定主题行的最新电子邮件并下载附件。我是新用户,到目前为止,我只找到了一种基于主题打印电子邮件正文的方法(来自stackoverflow How to retrieve Outlook inbox emails using R RDCOMClient?上提出的其他问题之一)。 理想情况下,我想在指定日期找到收到指定主题的电子邮件,然后下载附件。有人可以指出我正确的方向。任何帮助将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:13)

您可以使用AdvancedSearch方法搜索收件箱或任何其他文件夹:

library(RDCOMClient)
outlook_app <- COMCreate("Outlook.Application")
search <- outlook_app$AdvancedSearch(
    "Inbox",
    "urn:schemas:httpmail:subject = 'Super Important Email'"
)

这是异步方法,因此在继续下一步之前,R不会等待搜索完成。虽然确实存在AdvancedSearchComplete事件来处理这个问题,但我还是无法通过RDCOMClient来解决这个问题。作为一种解决方法,Sys.sleep(5)应该给搜索足够的时间来完成。

您可以查看这些结果,并使用ReceivedTime方法查询收到的时间。要将这些时间转换为日期,请使用Microsoft Office基准日期1899年12月30日:

results <- search$Results()
results$Item(1)$ReceivedTime() # Received time of first search result
as.Date("1899-12-30") + floor(results$Item(1)$ReceivedTime()) # Received date

我们现在可以查看特定日期收到的电子邮件的结果,例如2017年8月14日。

for (i in 1:results$Count()) {
    if (as.Date("1899-12-30") + floor(results$Item(i)$ReceivedTime()) 
            == as.Date("2017-08-14")) {
        email <- results$Item(i)
    }
}

我们可以查看电子邮件的附件,类似于我们查看搜索结果的方式。第一个附件将是email$Attachments(1)(注意电子邮件签名中的图片;这些也会显示!)。如果您对特定附件感兴趣,可以使用FileName方法找到它。找到所需的附件后,您可以将其保存到文件中并开始使用它,就好像它是任何其他文件一样。

attachment_file <- tempfile()
email$Attachments(1)$SaveAsFile(attachment_file)
data <- read.csv(attachment_file)

我在这里使用了临时文件路径,但您当然可以将附件保存到永久位置。

答案 1 :(得分:0)

阅读了 mdneuzerling 出色的原始解决方案中的评论后,我想添加一个额外的答案,并附上如何从子文件夹中提取数据的示例。这是我最近才发现的,并从原始解决方案中借鉴了很多

假设您的主要电子邮件是 user@outlook.com,并且在该地址中有一个名为 Inbox 的文件夹。此外,假设您的收件箱中有一个名为“重要”的子文件夹。如果您想从标题为“带附件的电子邮件”的电子邮件中从该子文件夹下载附件,您可以按如下方式定义文件路径:

path <- outlookNameSpace$Folders("user@outlook.com")$Folders("Inbox")$Folders("Important")$FolderPath()

然后,您将通过以下代码使用 mdneuzerling's 回答中指定的 AdvancedSearch 方法:

   search <- outlook_app$AdvancedSearch(
             paste0("'", path, "'"),
             "urn:schemas:httpmail:subject = 'Email with Attachment'"
)

按照 mdneuzerling 的 解决方案中概述的其余方法,您应该能够从子文件夹中提取附件。