0

I am currently trying to send 5 individual emails and spreadsheets through R using the RDCOMClient library. Here are the spreadsheets I am attempting to send in a vector

 [1] "C:/Users/sxc3gfl/Documents/data-science-team-master/INTERLINE BRANDS.xlsx"       
 [2] "C:/Users/sxc3gfl/Documents/data-science-team-master/POLY-AMERICA, LP.xlsx"       
 [3] "C:/Users/sxc3gfl/Documents/data-science-team-master/SO TTI POWER EQUIPMENT.xlsx" 
 [4] "C:/Users/sxc3gfl/Documents/data-science-team-master/GENERAC SO.xlsx"             
 [5] "C:/Users/sxc3gfl/Documents/data-science-team-master/SO TOTER LLC.xlsx"  

The spreadsheets paths seem to be correct. Here is my script to send out the emails:

path_names <- "C:/Users/sxc3gfl/Documents/data-science-team-master/"

attachments <-  c(paste0(path_names, sheet_names28))

for (sheet in sheet_names28) {
  attachments = c(paste0(path_names, sheet))
  OutApp <- COMCreate("Outlook.Application")
  outMail = OutApp$CreateItem(0)
  outMail[["To"]] = paste("user@outlook.com"
                          , sep=";", collapse=NULL)
  outMail[["subject"]] = "Subject"
  outMail[["body"]] = "Hi -
Attached is the spreadsheet 

"
  purrr::map(attachments, ~ outMail[["attachments"]]$Add(.))
  outMail$Send()
}

The first two spreadsheets get sent out fine, however when the script reaches [3] "C:/Users/sxc3gfl/Documents/data-science-team-master/SO TTI POWER EQUIPMENT.xlsx" I get the error listed below

 [1] "C:/Users/sxc3gfl/Documents/data-science-team-master/INTERLINE BRANDS.xlsx"       
 [2] "C:/Users/sxc3gfl/Documents/data-science-team-master/POLY-AMERICA, LP.xlsx"

ERROR

**<checkErrorInfo> 80020009 
No support for InterfaceSupportsErrorInfo
checkErrorInfo -2147352567
Error: Exception occurred.**
Jaskeil
  • 1,044
  • 12
  • 33

1 Answers1

2

First of all, there is no need to create a new Outlook Application instance each time in the loop:

for (sheet in sheet_names28) {
  attachments = c(paste0(path_names, sheet))
  OutApp <- COMCreate("Outlook.Application")
  outMail = OutApp$CreateItem(0)
  outMail[["To"]] = paste("user@outlook.com"
                          , sep=";", collapse=NULL)
  outMail[["subject"]] = "Subject"
  outMail[["body"]] = "Hi -
Attached is the spreadsheet 

"
  purrr::map(attachments, ~ outMail[["attachments"]]$Add(.))
  outMail$Send()
}

Instead, you can create a new Application once and then just create new mail items and then send them.

attachments = c(paste0(path_names, sheet))
OutApp <- COMCreate("Outlook.Application")

for (sheet in sheet_names28) {
  outMail = OutApp$CreateItem(0)
  outMail[["To"]] = paste("user@outlook.com"
                          , sep=";", collapse=NULL)
  outMail[["subject"]] = "Subject"
  outMail[["body"]] = "Hi -
Attached is the spreadsheet 

"
  purrr::map(attachments, ~ outMail[["attachments"]]$Add(.))
  outMail$Send()
}

Finally, make sure you pass a valid file path to the Add method. And the method is called for each file (entry) separately. It can't process files in batch.

Eugene Astafiev
  • 47,483
  • 3
  • 24
  • 45