【问题标题】:Extracting Zip+CSV file from attachment w/ Image in Body of Email从电子邮件正文中带图像的附件中提取 Zip+CSV 文件
【发布时间】:2018-07-19 14:38:06
【问题描述】:

我每天都会收到一封电子邮件,其中的附件包含 1 个 zip 文件和 1 个 csv 文件。

在我的电子邮件正文中,有一张图片被识别为另一个附件,我很确定。

当电子邮件正文中只有文本但使用“Adobe Marketing Cloud”图像时,以下脚本可以工作,它会搞砸脚本。

有没有办法我只能读取第一个附件读取(假设将是 zip 文件)?

这是我的脚本:

library(readr)
library(RDCOMClient)
outlook_app <- COMCreate("Outlook.Application")
search <- outlook_app$AdvancedSearch(
  "Inbox",
  "urn:schemas:httpmail:subject = 'SUBJECTNAME'"
)

Sys.sleep(5) # Wait a hot sec!


results <- search$Results() # Saves search results into results object

Sys.sleep(5) # Wait a hot sec!

results$Item(1)$ReceivedTime() # Received time of first search result

as.Date("1899-12-30") + floor(results$Item(1)$ReceivedTime()) # Received 
date

# Iterates through results object to pull out all of the items
for (i in 1:results$Count()) {
  if (as.Date("1899-12-30") + floor(results$Item(i)$ReceivedTime()) 
      == as.Date(Sys.Date())) {
    email <- results$Item(i)
  }
}

attachment_file <- tempfile()
email$Attachments(1)$SaveAsFile(attachment_file)

##Automatically Determine csv file name
file_name<-unzip(attachment_file,list=TRUE)
csv_file<-file_name$Name

##Read CSV File
newly_read_data <- read_csv(unz(attachment_file,csv_file))

错误来了:

file_name<-unzip(attachment_file,list=TRUE)
Error in unzip(attachment_file, list = TRUE) : 
  zip file 'C:\Temp\Rtmp86Gnzp\file29904a23387b' cannot be opened

任何帮助都会很棒,谢谢!

【问题讨论】:

  • @mdneuzerling 有这方面的经验吗?

标签: r email-attachments unzip sendmailr rdcomclient


【解决方案1】:

email$Attachments(1)$SaveAsFile(attachment_file) 将根据一些未知的顺序将first 附件保存到attachment_file 定义的文件路径中。如果您确定只有一个带有“.zip”扩展名的文件,那么您可以使用FileName 方法检查附件名称是否包含“.zip”:

attachment_file <- tempfile()

for (i in 1:email$Attachments()$Count()) {
    attachment <- email$Attachments(i)
    if (grepl(".zip", attachment$FileName(), ignore.case = TRUE)) {
        attachment$SaveAsFile(attachment_file)
    }
}

【讨论】:

  • 嗨@mdneuzerling,感谢您的帮助!出现错误提示:Error in email.Attachments.Count() : could not find function "email.Attachments.Count" 我尝试了您在上面提到的另一种方式,但由于语法错误。
  • 另外,在我上面运行之后,我还应该运行#Automatically determine csv file name section吗?
  • 该死。明天我会查找正确的代码并修改我的答案。对于那个很抱歉!属性certainly exists,但是这里属性和方法之间的界限很模糊。恐怕我对您用于解压缩文件的软件包一无所知,但是是的,您将通过解压缩附件并在其中加载 .csv。
  • 好的,听起来不错,感谢您查看此@mdneuzerling。与此同时,我也会对您提供的链接进行一些研究。
  • @NickKnauer 现在试试。有一些错误,但最大的错误是使用 grep 而不是 grepl。
猜你喜欢
  • 1970-01-01
  • 2020-01-23
  • 2011-01-09
  • 2016-04-12
  • 2017-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-02
相关资源
最近更新 更多