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

最佳答案

您可以使用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方法查询它们的接收时间。要将这些时间转换为日期,请使用1899年12月30日的Microsoft Office基础日期:
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)

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

10-08 10:51
查看更多