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

asm*_*smi 6 r rdcomclient

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

mdn*_*ing 15

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

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

这是一种异步方法,因此在继续下一步之前,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
Run Code Online (Sandbox Code Playgroud)

现在,我们可以查看特定日期收到的电子邮件的结果,例如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)
    }
}
Run Code Online (Sandbox Code Playgroud)

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

attachment_file <- tempfile()
email$Attachments(1)$SaveAsFile(attachment_file)
data <- read.csv(attachment_file)
Run Code Online (Sandbox Code Playgroud)

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

  • 要查找特定的 Outlook 子文件夹,您可以首先使用 'outlookNameSpace = Outlook_app$GetNameSpace("MAPI"); 查找正确的帐户。文件夹 &lt;- OutlookNameSpace$Folders(i); folder$Name(1)' 并且对于 i=1:n,则说 i=2 是正确的帐户,'folder &lt;- OutlookNameSpace$Folders(2)$Folders(j); 'folder$Name(1)' for j=1:m 为正确的文件夹(比如 j=6),然后 'folder &lt;- OutlookNameSpace$Folders(2)$Folders(6)$Folders(k); 右侧子文件夹的文件夹$Name(1)' (2认同)