Сохранить вложения, извлеченные из электронной почты, путем итерации - PullRequest
1 голос
/ 03 апреля 2019

Мне удалось идентифицировать и извлечь все необходимые электронные письма, которые мне нужны. Я также сохранил вложения по электронной почте в другую переменную. Однако у меня возникла проблема с сохранением этих вложений в локальную папку, в частности те, которые имеют тип файла = .xlsx.

library(RDCOMClient)
setwd("C:/Updated")
outlook_app <- COMCreate("Outlook.Application")
search <- outlook_app$AdvancedSearch(
  "Inbox",
  "urn:schemas:httpmail:subject like '%Daily Efficiency Tracker%'"
)

Sys.sleep(10)
results <- search$Results()

attachment_file <- getwd()

for (i in 1:results$Count()) {
  if (as.Date("1899-12-30") + floor(results$Item(i)$ReceivedTime()) 
      == as.Date("2019-04-02")) {
    email <- results$Item(i)
    attachment <- email$Attachments()
    for(j in 1:attachment$Count()){
      if (grepl(".xlsx", attachment$Item(i)$FileName(), ignore.case = TRUE)) {
        attachment$Item(i)$SaveAsFile(attachment_file)
      }
    }
  }
}

Когда я запускал его построчно, у меня была только ошибка в этой части:

attachment$Item(i)$SaveAsFile(attachment_file)

Ниже приведено сообщение об ошибке:

<checkErrorInfo> 80020009 
No support for InterfaceSupportsErrorInfo
checkErrorInfo -2147352567
Error: Exception occurred.

1 Ответ

0 голосов
/ 07 апреля 2019

Мне удалось сделать следующее, однако, это приведет к ошибке, если вы получите сообщение БЕЗ указанного вложения файла, которое вы ищете.

library(RDCOMClient)
library(openxlsx)

setwd("C:/Users/JGGliban/Desktop/Work/ADMIN/Data Integrity/DI OT Tracker")
outlook_app <- COMCreate("Outlook.Application")
search <- outlook_app$AdvancedSearch(
  "Inbox",
  "urn:schemas:httpmail:subject like '%Daily Efficiency and OT Tracker%'"
)

Sys.sleep(10)
results <- search$Results()
attachment_file <- tempfile()

date <- function(){
  if ((wday(format(Sys.Date(), "%Y-%m-%d"), label = FALSE)) == 1){
    return(format(Sys.Date()-3, "%Y-%m-%d"))
  } else {
    return(format(Sys.Date()-1, "%Y-%m-%d"))
  }
}

for (i in 1:results$Count()) {
  if (as.Date("1899-12-30") + floor(results$Item(i)$ReceivedTime()) == as.Date(date())) {
    email <- results$Item(i)
    attachment <- email$Attachments()

    for(j in 1:attachment$Count()) {
      if (grepl(".xlsx", attachment$Item(j)$FileName(), ignore.case = TRUE)) {
        attachmentname <- attachment$Item(j)$FileName()
        attachment_file <- paste0(getwd(), "/", attachmentname)
        attachment$Item(j)$SaveAsFile(attachment_file)
      }
      Sys.sleep(10)
    }
  }
}
...