Использование RDCOMClient для поиска в почтовом ящике Outlook

Я пытаюсь использовать RDCOMClient для поиска в моем почтовом ящике Outlook определенных тем в электронных письмах, а затем захватить вложение. У меня это работает с одним электронным письмом, но поскольку тема содержит элемент даты, мне нужно, чтобы поиск был похожим предложением, но я не совсем понимаю, где это вписывается в мой запрос ниже.

outlook_app <- COMCreate("Outlook.Application")
search <- outlook_app$AdvancedSearch(
  "Inbox",
  "urn:schemas:httpmail:subject = 'test email executed at 13/01/2019 10:00:08'"
)

Мне нужно искать только первую часть строки темы, ища все до даты и времени.


person Ed Cunningham    schedule 30.01.2019    source источник


Ответы (1)


Думаю, что-то вроде этого должно сработать. Он должен искать все сообщения, содержащие указанную фразу, и загружать каждое из их вложений.

library(RDCOMClient)
library(fs)

search.phrase <- 'test email executed at'

save.fldr <- tempdir() # Set a root folder to save attachments into
print(save.fldr)

outlook_app <- COMCreate("Outlook.Application")
search <- outlook_app$AdvancedSearch(
  "Inbox",
  paste0("http://schemas.microsoft.com/mapi/proptag/0x0037001E ci_phrasematch '", search.phrase, "'")
)

Sys.sleep(10) # Wait some time to allow search to complete

results <- search[['Results']]

for(i in c(1:results[['Count']])){ # Loop through search results
  attachments.obj <- results[[i]][['attachments']] # Gets the attachment object

  if(attachments.obj[['Count']] > 0){ # Check if there are attachments
    attach.fldr <- file.path(save.fldr, path_sanitize(results[[i]][['Subject']])) # Set folder name for attachments based on email subject

    if(!dir.exists(attach.fldr)){
      dir.create(attach.fldr) # Create the folder for the attachments if it doesn't exist
    }


    for(a in c(1:attachments.obj[['Count']])){ # Loop through attachments
      save.path <- file.path(attach.fldr, attachments.obj[[a]][['FileName']]) # Set the save path
      print(save.path)
      attachments.obj[[a]]$SaveAsFile(save.path) # Save the attachment
    }

  }
}
person Matt Jewett    schedule 30.01.2019
comment
Это прекрасно, спасибо! Однако быстрый вопрос - есть ли способ сохранить только определенные файлы? Мне нужны только файлы CSV, но код также извлекает любые изображения в подписях. - person Ed Cunningham; 31.01.2019
comment
Вы можете попробовать if(grepl('.csv', save.path, fixed = TRUE)){attachments.obj[[a]]$SaveAsFile(save.path)} - person Matt Jewett; 31.01.2019