2017-08-08 169 views
2

每週日我收到一封電子郵件,附帶一個壓縮文件夾。電子郵件的主題從不改變。我想找到具有指定主題行的最新電子郵件並下載附件。我是新的R用戶,到目前爲止,我只找到一種方法打印基於主題的電子郵件正文(從其他問題之一詢問在stackoverflow How to retrieve Outlook inbox emails using R RDCOMClient?)。 理想情況下,我想找到具有指定日期收到的指定主題的電子郵件,然後下載附件。請有人指點我正確的方向。任何幫助將不勝感激。謝謝。使用R從Outlook電子郵件下載附件

回答

5

你可以搜索你的收件箱,或任何其他文件夾,使用方法填寫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日的微軟辦公基地日期:

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 

現在我們可以看看通過對在特定日期收到一封電子郵件,結果,說8月14日,2017年

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) 

我在這裏使用的臨時文件路徑,但你可以在附件當然保存到永久位置。

+0

這對我的需求絕對完美。非常感謝!很酷 –

+0

@mdneuzerling - 謝謝。我嘗試過,但我得到的是搜索是類COMIDispatch的一個對象。我沒有看到電子郵件。你能否提供一個洞察我可能會做錯的事情。謝謝! – asmi

+0

@asmi您可以使用Results()方法從搜索中提取結果,使用Item()從結果中提取電子郵件。例如,搜索$ Results()$ Item(1)'將成爲搜索結果中的第一個(通常是最早的)電子郵件。它將是一個COMIDispatch對象,所以你必須使用方法來詢問它,例如。 '$搜索結果()$項目(1)$主題()'。有關更多詳細信息,請參閱[這裏](https://msdn.microsoft.com/en-us/vba/outlook-vba/articles/mailitem-object-outlook)。不要忘記括號,也:'主題()'將工作,但「主題」不會。 – mdneuzerling

相關問題